2017-07-25 29 views
2

我在寫一個程序,它將用戶的整數存儲在一個數組中,然後計算出數組的平均值。如何使用Ctrl + Z停止要求輸入?

數組最多可以容納100個整數。如果用戶想要做小於100時,他們打CTRL +ž(或命令 + d)停止提示號碼。

這裏是我的主要方法:

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

    int [] array = new int[100]; 
     System.out.printf("Enter a stream of numbers: "); 
     readIntoArray(input, array); 
     for (int i = 0; i<=array.length;i++) { 
      array[i] = input.nextInt(); 
     } 
    } 

這裏是讀取到陣列的方法。

public static int readIntoArray(Scanner input, int[] nums) { 
    int count = 0; //number of elements entered into the array 
    while (count <= nums.length && input.hasNextInt()) { 
     nums[count]=input.nextInt(); 
     count++;   
    } 
    return count; 
} 

這裏是一般的方法。

public static void printAboveAverage(int[] nums, int size) { 
    double average; 
    int sum = 0; 

    for (int i = 0; i < nums.length; i++) { 
     sum =+ nums[i]; 
    } 

    average = sum/size;  
    System.out.print(average); 

我在做什麼錯?

我不斷收到一個NoSuchElementException擊中CTRL +ž馬上。

+0

我有點困惑,因爲我沒有看到任何處理按鍵的代碼。你忽略了嗎?或者在Java程序中有沒有一些默認的,標準化的CTRL + Z行爲? – domsson

+2

@domsson不,顯然不是。 CTRL + Z關閉輸入流,由操作系統處理,而不是Java。 – Tom

+0

一個新手的好問題!但爲了記錄:理想情況下,您給我們[mcve] ...代碼,可以由我們編譯/運行,無需額外的努力。從這個意義上說,你的意見可以改進 - 包含完整的課程,而不需要介入。所以我只是去複製/粘貼/運行。 – GhostCat

回答

3

這裏:

while (count <= nums.length && input.hasNextInt()) { 

,當你按下ctrl-Z和沒有更多的INT這個循環可能會停下來。但是,下面的語句是:

array[i] = input.nextInt(); 

換句話說:你讀的方法似乎正確地檢查是否有足夠的數字是,如果掃描儀停止了輸入。

但是,您的主要方法忽略了這一點,並要求另一個號碼從掃描儀。

所以它可以是這樣簡單:只需將該循環放在您想要更多數字的主方法中。

+0

這停止拋出錯誤!謝謝! – VersaceVerac

+0

謝謝你們的幫助!是的,我完全理解。非常感謝! – VersaceVerac

+0

我很高興聽到這個消息,讓我想想我的老問題。 – GhostCat

-1

我建議你有一個嘗試和趕上,如果它給你一個例外,也許使用它來獲得無限數字(不要使用最多100個數字),當他發現他的例外平均?

不是最好的解決辦法,錯誤時拋出並不意味着總是使用,由於domsson的提醒

類似:

try{ 
    //Get the numbers 
} 
catch(Exception e){ 
    //Calculate the average 
} 

只是想大聲,它可以幫助你。

+0

例外情況是特殊情況;他們不應該用於正常的程序流程。 – domsson

+0

你說的沒錯,正如我所說的那樣,這不是最好的解決方案,但它可能有效 – Ash

+1

它不僅是「不是最好的」解決方案。這只是一個糟糕的嘗試,以避免錯過問題的理解。但是你沒有解決問題,直到你理解了它們,然後才解決它們。 – GhostCat