Я не уверен, что случилось, и мой профессор тоже в тупике. Условие цикла while прекращается только в том случае, если условие выполняется сразу. Как только цикл запущен, условие выполнения больше не останавливает его, и оно просто продолжается. Это похоже на внешний вид, который не проверяет состояние? Ниже мой код. Спасибо за любую помощь.Хотя цикл не заканчивается даже при выполнении условия - Java
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.");
}
}
}
Итак, почему это все еще испортится, когда я изменяю все переменные типа «Long» на «Int»? Изменение, которое должно было зафиксировать его, если это было так, как вы говорите, но это не так. Это был очень хороший ответ. – user2286647
То же самое происходит и для 'nextInt', просто добавьте еще одну' nextLine' после того, как вы прочтете int/long/double .. см. Мои объяснения. – Maroun
Спасибо. Это сработало. – user2286647