我放置了scan.nextLine()两次,以抵消程序在scan.nextLine()之后完成所有编译之前的完成。这样做会导致此错误:
运行时错误:线程“主”中的运行时错误异常 java.util.NoSuchElementException:找不到行 java.util.Scanner.nextLine(Scanner.java:1540)在 GFG.main(File.java:24)
这是因为我添加了一个额外的scan.nextLine()来解决上述问题(我仅扫描一件事)。由于我扫描了两次,因此程序第二次循环时会提示用户两次,并且仅解析第二个输入。
需要添加另一个scan.nextLine()来抵消程序在scan.nextLine()之后解析所有内容之前的结束(这是有关类似问题的另一篇文章的解决方案)。
public class DT
{
public static void main (String [] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("Enter # of test cases: ");
int t = scan.nextInt();
if (t >= 1 && t<= 100)
{
System.out.println("Enter values ");
for ( int j = 0; j < t; j++)
{
scan.nextLine();
String input = scan.nextLine(); //When you enter a second value, code is still scanning, prompts again
StringTokenizer st1 = new StringTokenizer(input);
for (int i = 1; st1.hasMoreTokens(); i++)
{
String val1 = st1.nextToken();
int num1 = Integer.parseInt(val1);
String temp = st1.nextToken();
String temp2 = st1.nextToken();
float num2 = Float.parseFloat(temp2);
System.out.println(num1 + " " + temp + " " + num2);
}
}
}
}
}
答案 0 :(得分:0)
您只需在调用nextLine()
之后直接调用nextInt()
,而无需循环访问。这是因为当您输入一个int时,您还要按下Enter键,所以会有一个行终止符。因此,您需要在nextLine()
之后调用nextInt()
,以读取并从输入缓冲区中删除行终止符。在循环内部,您已经在调用nextLine()
,因此请勿再次调用。这是代码更改:
System.out.print("Enter # of test cases: ");
int t = scan.nextInt();
scan.nextLine();
if (t >= 1 && t<= 100)
{
System.out.println("Enter values:");
for (int j = 0; j < t; j++)
{
String input = scan.nextLine();
请注意,循环中只有一个对nextLine()
的呼叫。