如何解决Java“找不到行”错误?

时间:2018-12-24 05:30:32

标签: java

我放置了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);

      }
   }
   }
   }   
   }

1 个答案:

答案 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()的呼叫。