2016-03-23 11 views
0

0.00から100.00までの任意の浮動小数点数を格納できる配列を作成しようとしています。私はhArrayの問題を抱えています。これは、初期化する必要があり、それを行うためのさまざまな方法を試す必要があると言っています。doublehArray [] = null;に変更するように指示しています。しかし、私が試してみると、それには価値がない。乱数を持つJavaの配列

問題がhArrayあるライン3と、ライン27の間で発生する[I}] = RNUM

は、私はエラーをチェックするためにそれらを使用した印刷ラインコマンドを無視します。

public static void main(String[] args) { 
    int i; 
    double hArray[]; 
    int nYears = 0, y = 0; 
    double rMax = 0.00,rMin = 100.00; 

    get input check if between 1-80 
    while(y == 0){ 
    String userData = JOptionPane.showInputDialog 
           ("Enter number of years"); 
    nYears = Integer.parseInt(userData); 

    if (nYears > 1 && nYears <= 80) 
     y = 1; 

    } 

    reset y to = 0 
    y = 0; 
    System.out.println("step1 "+ nYears+ " "+ y); 
    while(y <= nYears){ 
     System.out.println("step2"); 
     for(i = 0; i < 12; i++){ 
      System.out.println("step3"); 
      Random rand = new Random(); 
      double rNum = rand.nextFloat() * (rMax - rMin) + rMin; 
      hArray[i] = rNum; 
      System.out.println("step4" + hArray[i]); 
     } 
+0

コードに無限ループが含まれています。 2番目の 'while'ループで' y'がインクリメントされていることを確認してください。 – 4castle

+0

申し訳ありませんが、私はここに投稿するためにそれを短縮するために多くのビットを削除したが、それを指摘していただきありがとうございます。 – Pwoods

答えて

2

Javaではいくつかのことに注意することが重要です。まず、この行は「参照を​​宣言」されています。これはタイプdoubleの配列があるだろうと言っている行い、その配列に名前hArrayを与える

double hArray[]; 

すべてを。その配列はで、実際には初期化されていませんです。次に、この行で:配列が存在しないため、

hArray[i] = rNum; 

... rNumは、実際にどこにでも置くことができません。

あなたは長さ12に「初期化」配列に最初にこのような何かを行うことができます:

double[] hArray = new double[12]; 

は、次に2行目は動作します。 12より大きい場所を参照しようとすると、エラーが発生することに注意してください。ここのリストのサイズは と変更されず、とみなされます。

また、プリミティブを使用せずにコレクションを使用することもできます。この場合、List

List<Double> hArray = new ArrayList<>(); 

そして、それ以降:

hArray.add(rNum); 

これは、アレイは、最初からする必要がありますどのように大きな知っておく必要がなくなります。リストはオートスケールされます。また、デフォルト値を仮定しません。プリミティブの配列を初期化すると、0に相当するデフォルト値が配列に配置されます。プリミティブの使用を避けることがベストプラクティスと考えられます。

+0

'ArrayList'が生の型ではなくジェネリックを使用することを確認してください。それを 'new ArrayList ()'または 'new ArrayList <>()' – 4castle

+0

@ 4castle 'List hArray = new ArrayList();' **に変更してください。新しいリストのタイプはJavaによって推論されます。さらに、実装クラスを知る特別な理由がない限り、変数の型として 'ArrayList'より' List'を使うほうが良いでしょう。 –

+0

私はあなたの 'List'を議論するつもりはありません。私は、[this](https://docs.oracle.com/javase/8/docs/technotes/guides/language/type-in​​ference-generic-instance-creation.html)によれば、ジェネリックの欠如コンストラクタでは、何も破らないという事実にもかかわらず、 "チェックされていない変換警告"が生成されます。 – 4castle

1

double hArray[]は、配列を宣言し、それを割り当てません。
また、配列は固定サイズです。

あなたのコードは、12の値の配列を必要とするので、あなたがに変更する必要があります。

double[] hArray = new double[12]; 

配列は今、すべての0.0をデフォルト、12個の値を割り当てられます。

関連する問題