[英]Cannot get input in simple output program in 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();
}
}
这个简单的程序只是将不同数量的elements(n)和array(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
我不知道发生了什么事。 是虫子吗? 请帮忙
您正在使用扫描仪接受用户输入。
Scanner y=new Scanner(System.in);
在Scanner类中,如果我们在七个nextXXX()方法中的任何一个之后调用nextLine()方法,则nextLine()不会从控制台读取值,并且光标也不会进入控制台,它将跳过该步骤。 nextXXX()方法是nextInt(),nextFloat(),nextByte(),nextShort(),nextDouble(),nextLong(),next()。
在BufferReader类中,没有这种类型的问题。 由于nextXXX()方法忽略换行符,并且nextLine()仅读取换行符,因此仅对于Scanner类会出现此问题。 如果我们在nextXXX()和nextLine()之间再使用一次nextLine()方法的调用,则不会发生此问题,因为nextLine()将消耗换行符。
请检查此SO 链接,它有很好的解释。
问题的一部分是您要创建多个扫描仪。 创建一个扫描仪并在各处使用它,如下所示:
import java.util.Scanner;
public class TestClass {
public static void main(String[] args) {
Sample obj = new Sample();
obj.getArraySize();
obj.displayDetails();
}
}
class Sample{
private int arraySize;
Scanner scanner = new Scanner(System.in);
public void getArraySize(){
System.out.print("Enter size of array: ");
arraySize = scanner.nextInt();
System.out.println("Entered array size = " + arraySize);
}
public void displayDetails(){
//Create an integer array of size arraySize
int intArray[] = new int[arraySize];
//Repeatedly request integers for the array
for( int i=0; i<arraySize; i++) {
int nextInt = scanner.nextInt();
intArray[i] = nextInt;
System.out.println("Entered element = " + intArray[i]);
}
//Print out the entered elements
System.out.println("Entered array: ");
for( int i=0; i<arraySize; i++) {
System.out.print(intArray[i]+" ");
}
scanner.close();
}
}
控制台输出:
Enter size of array: 5
Entered array size = 5
5 4 3 2 1
Entered element = 5
Entered element = 4
Entered element = 3
Entered element = 2
Entered element = 1
Entered array:
5 4 3 2 1
您仍然需要检查下一个值实际上是一个int。 如果您在其中输入其他类型的值(例如字母),则会崩溃。 有关其他详细信息,请参见以下链接:
https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.