2016-10-11 8 views
1

私は、whileループを使用して配列を塗りつぶす作業をしています(JOptionPaneを使用する必要があります)。forループなしの1D配列への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

forループと一緒にarray.lengthを使用してください。 –

+0

こちらをご覧ください。 http://stackoverflow.com/questions/576855/how-do-i-fill-arrays-in-java – Redwan

+0

@Redwan私はまだこの質問を見ましたが、回答が見つかりませんでした – hDDen

答えて

0

あなたのコードは、それが5つの未満のスコアと6〜10のスコア、および10の以上のスコアのためにArrayIndexOutOfBoundsExceptionの間違った答えのためにあなたナンセンスを与える5でスコアの固定数を、処理することができます。なぜならあなたは10要素の固定長配列を使い、最初の5要素を手動で合計しているからです。ユーザー入力を格納するための動的リストを使用し、合計を処理するためのfor-loopを使用する方がよいでしょう。

この重要な問題とは別に、ユーザー入力を処理するコードは2回繰り返され、非整数文字列は処理されません。そのコードをメソッドに入れ、適切な名前を付ける必要があります。

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 ダブル配列[] =新しいダブル配列[10] 送信Double.parseDouble(JOptionPane.showInputDialog( "..."); while ]; sent = Double.parseDouble(JOptionPane.showInputDialog( "..."); } ' ? – hDDen

+0

本当に、私はあなたが気づいたよりもはるかに単純な概念かもしれないと思います。ループが終了するタイミングを知ることを目的としている唯一の目的のフラグ。例えばif(配列がすべてのthを保持している私が欲しいe値){sent = 1}したがって 'while'条件はもはや満たされません。 – kemika

関連する問題