扫描仪循环头痛

时间:2012-10-06 02:52:28

标签: java loops input io

我有一个家庭作业,需要用户输入并将其存储在各种数据结构(链接列表,堆栈等数组)中。但是,我一直在编写我之前的家庭作业的主要课程,而且这个课程的方式非常相似。我有一个非常小的主要方法。所有main方法都会实例化一个我不想被销毁的新对象,然后永远遍历程序,直到用户选择其他方式。然后我有一个menu()方法,它打印一个选择列表并读取用户的选择。然后从那里,我将该选择传递给另一个解释选择并相应执行的方法。

我在过去的任务中遇到的问题,现在我从来没有真正得到一个好的答案。问题似乎在于我的menu()方法,更具体地说,是Scanner对象。在我在扫描仪对象上调用nextLine()方法后,流中似乎总会留下一些垃圾。因此,下次调用menu()方法时,它会读取该垃圾并通过该垃圾循环程序的其余部分,直到第三次调用menu()为止。在过去,我会在收到输入并忽略它后立即调用next()方法来解决这个问题。但是,我现在似乎也遇到了问题。

特别是在这个程序中,我有一个请求用户输入城市名称的方法。现在,城市名称可以是多个单词(棕榈城,西棕榈滩,卫星海滩,纽约等)。现在,当扫描程序读入其中一个多字城市时,它会像以前一样执行操作,下次调用menu()方法时会读入一些垃圾,并使用它直到整个程序直到{{再次调用1}}。在这种情况下,它会打印一个字符串“Invalid Selection”,然后再次打印菜单。我不能为我的生活找出正在发生的事情。任何帮助将不胜感激。

menu()

1 个答案:

答案 0 :(得分:0)

扫描仪的默认分隔符为white space。因此,当您输入New York时,white space现在,如果您拨打next(),则扫描程序会将其视为两个令牌。

更好的选择是使用nextLine()方法来读取这些值。