获得准确的int和String输入

时间:2011-11-26 20:48:18

标签: java input io user-input java.util.scanner

在读取int后,我无法从用户读取字符串。基本上我必须从用户获得一个int,然后是几个字符串。我可以成功获得用户的int。但是,当我开始要求字符串(作者,主题等等)时,我的扫描仪会“跳过”第一个字符串输入。

例如,我的输出如下所示: 输入您的选择: 2 输入作者: 输入主题: 受试者

如您所见,用户永远无法进入作者,我的扫描仪会将null存储到作者字符串中。

以下是产生上述输出的代码:

    String author;
    String subject;
    int choice;
    Scanner input = new Scanner(System.in);

    System.out.println("Enter choice:");
    choice = input.nextInt();
    System.out.println("Enter author:");
    author = input.nextLine();
    System.out.println("Enter subject:");
    subject = input.nextLine();

非常感谢任何帮助。谢谢! -Preston Donovan

2 个答案:

答案 0 :(得分:3)

问题在于,当您使用readLine时,它会从最后一个读取令牌读取到包含该令牌的当前行的末尾。它不会自动移动到下一行,然后读取整行。

一致地使用readLine并在适当的时候将字符串解析为整数,或者对readLine添加额外的调用:

System.out.println("Enter choice:");
choice = input.nextInt();

input.nextLine(); // Discard the rest of the line.

System.out.println("Enter author:");
author = input.nextLine();

答案 1 :(得分:0)

这完美无缺。 虽然虽然不需要像以前的程序那样制作以前的程序。谁能解释一下呢?

 import java.util.Scanner;

 public class Average Marks {

 public static void main(String[] args) {
  Scanner s = new Scanner ( System.in);
  System.out.print("Enter your name: ");
  String name=s.next();
  System.out.print("Enter marks in three subjects: ");
  int marks1=s.nextInt();
  int marks2=s.nextInt();
  int marks3=s.nextInt();
  double average = ( marks1+marks2+marks3)/3.0;
  System.out.println("\nName: "+name);
  System.out.println("Average: "+average);