IO Scanner Java



我想获取 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]);
  }
 }
问题

可能会导致 2 种情况:

  1. 字符串包含它们不是数字的其他字符

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

所以.. 在拆分命令之前添加此行:

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]);  
} 

发生这种情况是因为使用了下一个Int。

我建议首先使用 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]);
  }

最新更新