当我尝试使用两次时,Scanner.nextLine()没有返回任何内容。

问题描述 投票:-1回答:1

我正在为我的班级决赛制作一个8球程序,我使用的nextLine()函数一直遇到错误。一开始,在没有给用户输入的情况下,在任何问题回答之前,它一直在打印答案,我以为我已经想通了,但是当我把它们放在同一个for()循环中时,它什么也没有返回。我在这里做错了什么?下面是我的代码。

import java.util.Random;
import java.util.Scanner;
import java.io.*;
class Main {
  public static void main(String[] args) throws IOException {
    Scanner reader = new Scanner(new File("8ball.txt"));
    Scanner reader2 = new Scanner(new File("medievalball.txt"));
    System.out.println("Welcome to 8 ball! You can choose a theme: Medieval or Normal, or type 'quit' to quit at any time.");
    Scanner input = new Scanner(System.in);
    String inInput = input.nextLine();
    String[] normal = new String[12];
    String[] medieval = new String[10];
    Random random = new Random();
    int randomNum = random.nextInt(10)+1;
    Random random2 = new Random();
    int randomNum2 = random2.nextInt(12)+1;
    while (true)
    {
    if (inInput.equals("Normal"))
    {
      System.out.println("You've selected Normal. Preparing... ");



      System.out.println("Ask me something, I can answer.");
      Scanner normalInput = new Scanner(System.in);

      for (int i=0; i < normal.length;i++)
      {
        normal[i] = normalInput.nextLine();
      }
    for (int i=0; i < normal.length;)
    {
      normal[i] = reader.nextLine();
     System.out.println(normal[randomNum]);
     break;
    }

    }

    else if (inInput.equals("Medieval"))
    {
      System.out.println ("You hath selected Medieval. Preparing...");
      System.out.println("I have unbearable knowledge of the world, ask me thine question.");
      Scanner medievalInput = new Scanner(System.in);
      for (int i=0; i < medieval.length;i++)
      {
        medieval[i] = medievalInput.nextLine();
      }
      for (int i=0; i < medieval.length;i++)
      {
        System.out.println(medieval[randomNum2]);
        break;
      }
    }
    else if (inInput.equals ("quit"))
    {
      System.out.println ("See you next time!");
      System.exit(0);
    }
    else
    {
      System.out.println("Sorry, that's not a choice.");
    }
  }
  }
}
java java.util.scanner next
1个回答
0
投票

在你尝试研究这个问题之前,你需要建立一个良好的基础知识理解。我已经从你的程序中强调了一些问题。

  1. 如果这个值... normal.length >= 1下面的语句将创建一个无限循环。你需要用表达式来改变值 i (例如 i++)在循环语句的最后一部分。

    for (int i=0; i < normal.length;)
    
  2. 您不需要在循环语句的最后部分使用多个 Random 来生成多个随机数。下面给出了一个例子,说明了如何使用相同的 Random.

    Random random = new Random();
    int randomNum = random.nextInt(10) + 1;
    int randomNum2 = random.nextInt(12) + 1;
    
  3. 每当你使用扫描仪从文件中读取东西时,你应该始终使用 Scanner::hasNextLine 以免 NoSuchElementException 例如,以下代码块

    for (int i=0; i < normal.length; i++) {
        normal[i] = reader.nextLine();
        //...
    }
    

    应写成

    for (int i=0; i < normal.length && reader.hasNextLine(); i++) {
        normal[i] = reader.nextLine();
        //...
    }
    
  4. break 在循环中,没有条件的条件是没有意义的,如 break 语句将导致循环在第一次迭代后终止,反驳使用循环的目的。

    for (int i=0; i < medieval.length;i++) {
        System.out.println(medieval[randomNum2]);
        break;
    }
    
© www.soinside.com 2019 - 2024. All rights reserved.