【问题标题】:IO Scanner JavaIO 扫描器 Java
【发布时间】:2014-03-06 13:03:21
【问题描述】:

我想获取 5 个数字的用户输入,然后通过拆分字符串将该输入更改为整数。但我不断收到错误消息:线程“main”java.lang.NumberFormatException中的异常:对于输入字符串:“”。关于如何修复它的任何线索?

public class Exercise{
 public static void main(String [] args){

  Scanner scan = new Scanner(System.in);
  System.out.println("Input Quizzes: ");
  Scanner scan = new Scanner(System.in);
  String quiz = scan.nextLine();
  String [] part = quiz.split(" ");
        int pq1 = Integer.parseInt(part[0]);
        int pq2 = Integer.parseInt(part[1]);
  System.out.println("Input Additionals: ");
  String quiz1 = scan.nextLine();
  String [] part1 = quiz1.split(" ");
        int pqa1 = Integer.parseInt(part1[0]);
        int pqa2 = Integer.parseInt(part1[1]);
  System.out.println("Input Recitation: ");
        int recitation = scan.nextInt();
  System.out.println("Input Seatworks: ");
        int swhw1 = scan.nextInt();
  System.out.println("Input Exercises ");
  String exp = scan.nextLine();
  String [] part2 = exp.split(" ");
            int ex1 = Integer.parseInt(part2[0]),
                ex2 = Integer.parseInt(part2[1]),
                ex3 = Integer.parseInt(part2[2]),
                ex4 = Integer.parseInt(part2[3]),
                ex5 = Integer.parseInt(part2[4]);
  }
 }

【问题讨论】:

  • 如何输入数字? 1 2 3 4 5 然后按 Enter 键?你的代码对我来说很好用。
  • 不确定输入是什么,但是您是否修剪了字符串?使用 trim() 方法。

标签: java input io


【解决方案1】:

问题可能在2种情况下引起:

  1. 字符串包含其他非数字字符

  2. 数字之间有多个空格,因此您 在拆分数组中获得超过 5 个单元格(这些单元格包含 空字符串"")

so.. 在拆分命令之前添加这一行:

exp = exp.trim().replaceAll(" +", " ");

这将解决问题!也推荐try&catch

这是完整的代码:

public static void main(String [] args){
Scanner scan = new Scanner(System.in);  
System.out.println("Input Exercises ");  
String exp = scan.nextLine();  
exp = exp.trim().replaceAll(" +", " ");  
String [] part2 = exp.split(" ");  
        int ex1 = Integer.parseInt(part2[0]),  
            ex2 = Integer.parseInt(part2[1]),  
            ex3 = Integer.parseInt(part2[2]),  
            ex4 = Integer.parseInt(part2[3]),  
            ex5 = Integer.parseInt(part2[4]);  
} 

【讨论】:

    【解决方案2】:

    这是因为使用了 nextInt。

    我建议先使用 nextLine() 读取整行,然后使用 Integer.parseInt() 方法验证整数输入。

    像这样:

    Scanner scan = new Scanner(System.in); String s = scan.nextLine();
    
    try{
        Integer.parseInt(s); } catch(NumberFormatException ex){
        System.out.println("Its not a valid Integer"); }
    

    或者你可以在扫描仪之前放一个下一行(不推荐这样做)

    public static void main(String [] args){
    
      Scanner scan = new Scanner(System.in);
      System.out.println("Input Quizzes: ");
      scan = new Scanner(System.in);
      String quiz = scan.nextLine();
      String [] part = quiz.split(" ");
            int pq1 = Integer.parseInt(part[0]);
            int pq2 = Integer.parseInt(part[1]);
      System.out.println("Input Additionals: ");
      String quiz1 = scan.nextLine();
      String [] part1 = quiz1.split(" ");
            int pqa1 = Integer.parseInt(part1[0]);
            int pqa2 = Integer.parseInt(part1[1]);
      System.out.println("Input Recitation: ");
            int recitation = scan.nextInt();
      System.out.println("Input Seatworks: ");
            int swhw1 = scan.nextInt();
            scan.nextLine();
      System.out.println("Input Exercises ");
      String exp = scan.nextLine();
      String [] part2 = exp.split(" ");
                int ex1 = Integer.parseInt(part2[0]),
                    ex2 = Integer.parseInt(part2[1]),
                    ex3 = Integer.parseInt(part2[2]),
                    ex4 = Integer.parseInt(part2[3]),
                    ex5 = Integer.parseInt(part2[4]);
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多