调试无法在Java中的简单输出程序中获取输入
我会保持简短,这是程序-
class Sample{
private int n;
public void getDetails(){
Scanner y=new Scanner(System.in);
n=y.nextInt();
System.out.println("Entered 'n' = "+n);
}
public void displayDetails(){
int i,j;
int arr[]=new int[n];
Scanner x=new Scanner(System.in);
for(j=0;j<n;j++) {
arr[j] = x.nextInt();
System.out.println("Entered element = "+arr[j]);
}
System.out.println("Entered array: ");
for(i=0;i<n;i++)
System.out.print(arr[i]+" ");
}
}
public class TestClass {
public static void main(String[] args) {
Sample obj = new Sample();
obj.getDetails();
obj.displayDetails();
}
}
这个简单的程序只是将元素数(n)和数组元素数(arr[])作为不同方法的输入。 当以交互模式输入时,一切正常。这是控制台输出-
5
Entered 'n' = 5
1 2 3 4 5
Entered element = 1
Entered element = 2
Entered element = 3
Entered element = 4
Entered element = 5
Entered array:
1 2 3 4 5
但当我将其作为Stdin输入(或一次输入所有输入)时,它只接受元素数(n)并忽略我的数组输入(arr[])。这里我必须再次给出数组元素。控制台输出-
5
1 2 3 4 5Entered 'n' = 5
1
Entered element = 1
2
Entered element = 2
3 4 5
Entered element = 3
Entered element = 4
Entered element = 5
Entered array:
1 2 3 4 5
我不知道发生了什么事。是虫子吗?请帮忙
# 1 楼答案
部分问题在于您正在创建多个扫描仪。创建一个扫描仪,并在任何地方使用,如下所示:
控制台输出:
您仍然需要检查下一个值是否为int。如果在其中放入不同类型的值,如字母,它将崩溃。有关更多详细信息,请参见以下链接:
https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html
Java Multiple Scanners
Why is not possible to reopen a closed (standard) stream?
# 2 楼答案
您正在使用扫描仪获取用户输入
在Scanner类中,如果我们在七个nextXXX()方法中的任何一个之后调用nextLine()方法,那么nextLine()不会从控制台读取值,光标也不会进入控制台,它将跳过该步骤。nextXXX()方法有nextInt()、nextFloat()、nextByte()、nextShort()、nextDouble()、nextLong()、next()
在BufferReader类中不存在此类问题。这个问题只在Scanner类中出现,因为nextXXX()方法忽略换行符,而nextLine()只读取换行符。如果我们在nextXXX()和nextLine()之间再调用一次nextLine()方法,那么这个问题就不会发生,因为nextLine()将使用换行符
请检查一下,这样它就有了很好的解释