我有一個家庭作業,需要用戶輸入並將其存儲在各種數據結構(鏈表,堆棧等數組)中。但是,我一直以類似的方式撰寫我以前的家庭作業的主要類別,而這一類作業也是。我有一個非常微小的主要方法。所有主要方法都是實例化一個新的對象,我不想被銷燬,然後循環遍歷該程序,直到用戶選擇其他方式。然後我有一個menu()
方法,它打印選擇列表並讀取用戶的選擇。然後從那裏,我將該選擇傳遞給解釋選擇並相應執行的另一種方法。掃描儀循環頭痛
我一直在過去的任務中遇到的問題,現在我從來沒有真正得到好的答案。問題似乎在於我的menu()
方法,更具體地說,是Scanner
對象。我在掃描器對象上調用nextLine()
方法後,似乎總會有一些垃圾留在流中。因此,下一次調用menu()
方法時,它會讀取該垃圾並通過該垃圾循環執行程序的其餘部分,直到menu()
被稱爲第三次。過去,我會在收到我的輸入並忽略它之後立即調用next()
方法來解決此問題。不過,我現在似乎也遇到了問題。
特別是在這個程序中,我有一個請求用戶輸入城市名稱的方法。現在,城市名稱可以不止一個字(棕櫚城,西棕櫚灘,衛星海灘,紐約等)。現在,當掃描器讀入其中一個多字城市時,它會執行與以前相同的操作,在下一次調用menu()
方法時讀入一些垃圾,並且通過它重新調用menu()
。在這種情況下,它會打印一個字符串「Invalid Selection」,然後再次打印菜單。我不能爲了我的生活而弄清楚發生了什麼事。任何幫助,將不勝感激。
import java.util.Scanner;
public class CSAir
{
public static Scanner input = new Scanner(System.in);
public static void main(String[] args)
{
CityList flightLog = new CityList();
boolean loop = true;
while(loop)
{
loop = actions(menu(),flightLog);
}
}
private static String menu()
{
System.out.print("Please Make a Selection\n" +
"I) Insert a city\n" +
"A)Add a flight path (One Way)\n" +
"R) Request a flight\n" +
"L) Load from a text file\n" +
"Q) Quit\n" +
"\nSelection: ");
String in = input.next();
//input.next();
System.out.println();
return in;
}
private static boolean actions(String selection, CityList flightLog)
{
if(selection.equalsIgnoreCase("I"))
{
insert(flightLog);
return true;
}
else if(selection.equalsIgnoreCase("A"))
{
add(flightLog);
return true;
}
else if(selection.equalsIgnoreCase("R"))
{
request(flightLog);
return true;
}
else if(selection.equalsIgnoreCase("L"))
{
return true;
}
else if(selection.equalsIgnoreCase("Q")) return false;
else
{
System.out.println("Invalid Selection!\n");
return true;
}
}
private static void request(CityList flightLog)
{
System.out.print("Origin: ");
String origin = input.nextLine();
System.out.print("\nDestination: ");
try
{
flightLog.isPath(origin, input.next());
}
catch (AllDestinationsVisitedException e)
{
e.getMessage();
}
}
private static void add(CityList flightLog)
{
System.out.print("Origin: ");
String origin = input.nextLine();
System.out.print("\nDestination: ");
flightLog.addPath(origin, input.next());
}
private static void insert(CityList flightLog)
{
System.out.print("Enter a City: ");
try
{
flightLog.addCity(input.next());
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
System.out.println();
}
}
由於這是全部文本輸入,因此您需要假設/指示用戶在一行中輸入相關數據並在每次輸入一些數據時讀取整行。目前,你的程序有'next()'和'nextLine()'的組合。 – nhahtdh
這樣做。我從來沒有真正看到兩者之間的區別,我猜。謝謝 – audiFanatic