2016-10-11 70 views
1

我有一個任務,使用控制while循環(我必須使用JOptionPane)填充數組。填充1D數組,無for循環在java

int score[] = new int [10]; 
int x = 0; 
int size = 0; 
x = Integer.parseInt(JOptionPane.showInputDialog("Please enter the score")); 

while (x != -1){ 
score[size]= x ; 
x = Integer.parseInt(JOptionPane.showInputDialog("Please enter the score")); 
size++;  

} 
System.out.println(score[0]+score[1]+score[2]+score[3]+score[4]); 


} 

這是我現在的代碼,如果我輸入:1,2,3,4,5,-1,println的結果是15。 你能幫我找到我做了什麼嗎?我是一個新的Java用戶。

+0

使用array.length與for循環 –

+0

你應該看看這裏。 http://stackoverflow.com/questions/576855/how-do-i-fill-arrays-in-java – Redwan

+0

@Redwan我看到了這個問題,但我還沒有找到答案 – hDDen

回答

0

您的代碼只能處理一固定數量的分數,這是5。它會給你廢話了不到5分和錯誤的答案爲6至10分,並ArrayIndexOutOfBoundsException超過10分。因爲您使用的是10個元素的固定長度數組,並手動合計前5個元素。您最好使用動態列表來存儲用戶輸入,並使用for循環來處理總和。

除了這個主要問題,處理用戶輸入的代碼重複兩次,並且它不處理非整數字符串。你應該把這些代碼放在一個方法中,並給它一個合適的名字。

import javax.swing.*; 
import java.util.ArrayList; 
import java.util.List; 

public class Filling1DArray { 

    /** 
    * Ask the user to enter an integer 
    * @return The integer the user entered or -1 if the input is not an integer 
    */ 
    private static int nextScore() { 
     try { 
      return Integer.parseInt(JOptionPane.showInputDialog("Please enter the score (or -1 to stop)")); 
     } catch (NumberFormatException e) { 
      return -1; 
     } 
    } 

    public static void main(String [] args) { 

     // Dynamic list to hold the user input 
     List<Integer> scores = new ArrayList<>(); 

     // Get user input until she enters -1 or some non-integer 
     int score; 
     while ((score = nextScore()) != -1) 
      scores.add(score); 

     // Compute the sum using stream API 
     System.out.println(scores.stream().reduce((a, b)->a+b).orElse(-1)); 

     // Or a simple ranged-for 
     int sum = 0; 
     for (int s : scores) sum += s; 
     System.out.println(sum); 
    } 
} 
0
int sent=0; 
while(sent!=1){ 
    //append to array 
    //do something which may change the value of sent 
} 
+0

所以我應該做一些像 (發送!= 1)發送+ =數組[0]發送= Double.parseDouble(012) ]; 發送= Double.parseDouble(JOptionPane.showInputDialog(「...」); }' – hDDen

+0

不是真的,我覺得比你意識到這可能是一個更簡單的概念,想想定點變量作爲的?標誌,其唯一目的是讓循環知道什麼時候終止。例如,如果(數組保持所有th我想要的e值){sent = 1},因此'while'條件將不再被滿足。 – kemika