簡體   English   中英

無法在Java的簡單輸出程序中獲取輸入

[英]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

Java多重掃描儀

為什么無法重新打開封閉的(標准)流?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM