我的Scanner java代码出了什么问题?

时间:2017-03-29 17:33:18

标签: java

import java.util.Scanner;  

public class Exercise5 {  

 public static void main(String[] args) {  
  Scanner in = new Scanner(System.in);  

  System.out.print("Input first number: ");  
  int num1 = in.nextInt(5);  

  System.out.print("Input second number: ");  
  int num2 = in.nextInt(25);  

  System.out.println(num1 + " x " + num2 + " = " + num1 * num2);  
 }  

}  

**这是我的java代码,expect输出应该是这样的:

输入第一个数字:25
输入第二个数字:5
25 x 5 = 125

插入代码并运行后,输出与答案

的区别太大了

这是输出:

Input first number: Exception in thread "main"   java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at Exercise5.main(Exercise5.java:27)

如何修复我的代码?

6 个答案:

答案 0 :(得分:2)

" 5" in in.nextInt(5);基数。你需要它吗?如果你使用没有参数的nextInt()方法,程序是否有效?

另外,由于某些原因,这两个版本都适用于我而没有错误:

// output of nextInt(radix) version
java Excercise5
Input first number: 32
Input second number: 23
17 x 53 = 901

// output of nextInt() version
java Excercise5
Input first number: 5
Input second number: 25
5 x 25 = 125

答案 1 :(得分:2)

有两种nextInt()方法:

nextInt()就可以读取基数为10的int

nextInt(radix)读取基数N中的下一个数字N为5,或者你的情况为25

所以,打电话给第一个,你就完成了

答案 2 :(得分:1)

你不应该把5和25放在in.nextInt的括号内,你会在控制台行内写入值,扫描仪会读取它。
所以相反

 int num1 = in.nextInt(5); 

应该看起来像

 int num1 = in.nextInt(); 

答案 3 :(得分:1)

无需为nextInt指定基数。

只需使用nextInt的no args版本。

替换

int num1 = in.nextInt(5);

<强>与

int num1 = in.nextInt();

int num2 = in.nextInt(25);

<强>与

int num2 = in.nextInt();

答案 4 :(得分:1)

固定代码

import java.util.Scanner;  

public class Exercise5 {  

public static void main(String[] args) {  
Scanner in = new Scanner(System.in);  

 System.out.print("Input first number: ");  
 int num1 = in.nextInt();  

 System.out.print("Input second number: ");  
 int num2 = in.nextInt();  

 total = num1*num2

System.out.println(num1 + " x " + num2 + " = " + total);  
}  

}  

您的nextInt()将捕获用户输入,因此无需输入值。当您在IDE的输出窗口中出现提示时,您将手动将它们放入。

我还将num1和num2放入单独的变量(例如,int total = num1 * num2),然后打印出println中的总数:)

答案 5 :(得分:0)

编辑:甚至没有注意到你向nextInt()提供了一个参数。正如另一个提到的,这不是你想要做的。

此外,调用nextInt()后,新行字符仍在缓冲区中。在程序按照您的意图运行之前,您还需要解决此问题。

Understanding Scanner's nextLine(), next(), and nextInt() methods