Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

While loop not terminating even when condition is met-Java

I am not sure what is wrong and my Professor is stumped as well. The while loop condition only terminates if the condition is met right away. Once the loop is running, the met condition no longer stops it and it just keeps going. Its like the look isnt checking the condition anymore? Below is my code. Thank you for any help.

    import java.io.*;
    import java.util.*;


public class createPhoneList {

    public static void main(String[] args) {

        DataOutputStream ostream;//creates output stream
        Scanner input = new Scanner(System.in);//creates scanner in object
        final String DONE = "DONE";//will be used to end data entry loop
        String firstName;
        String lastName;
        long phoneNumber;

        try{
            ostream = new DataOutputStream(new   FileOutputStream("javaContactsUnit4Assignment.txt"));
            System.out.print("Enter First Name or type 'DONE' to quit: ");
            firstName = input.nextLine();
            while(!firstName.equalsIgnoreCase(DONE)){
                /*
                 * Error occuring at runtime where while loop terminates only if
                 * "done" is typed first, but once the loop is running "done" no longer
                 * stops it. Not sure what is wrong...
                 */
                input.nextLine();
                System.out.print("Please enter Last Name: ");
                lastName = input.nextLine();
                System.out.print("Please enter the Phone Number(with NO DASHES, as they will cause a fatal error): ");
                phoneNumber = input.nextLong();
                ostream.writeUTF(firstName);
                ostream.writeUTF(lastName);
                ostream.writeLong(phoneNumber);

                System.out.print("Enter First Name or type 'DONE' to quit: ");
                firstName = input.nextLine();
                }

        }
        catch(IOException e){
            System.err.println("Error opening file.");
        }
        catch(InputMismatchException e){
            System.err.println("Invalid data was entered. Please try again.");
        }
        catch(Exception e){
            System.err.println("You encountered a fatal error. Please try again.");
        }

    }
}
like image 783
user2286647 Avatar asked Aug 14 '26 20:08

user2286647


1 Answers

You should add another input.nextLine(); after phoneNumber = input.nextLong();.

That's because input.nextLong() command reads only the long value (and skips the \n which is the enter key you press right after).

So when you continue reading with input.nextLine() you receive the \n and not "done", that's why your loop never terminates. So adding another input.nextLine() will "swallow" the \n and the next one will read the actual String.

like image 152
Maroun Avatar answered Aug 17 '26 10:08

Maroun



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!