0

私はプログラムを持っていて、ARRAYをランダムに読みません。プログラムにエラーはありませんが、出力中にnull値があります。解決策を教えてください...

import java.io.FileInputStream;
import java.util.Properties;
import java.util.Random;
import javax.swing.JOptionPane;

public class ReadDB {
    public static void main(String[] args) {

        Properties prob = new Properties();
        String word [] = new String [20] ;
        try{
            prob.load( new FileInputStream("words.txt"));
        }catch(Exception e){
        }
        for(int i=1; i<6; i++){         
            String temp = prob.getProperty(""+i);
            word[i] = temp;
            Random ran = new Random ();

            String Val = word[ran.nextInt(word.length)];

            System.out.println(Val);

        }
    }
}
4

3 に答える 3

5

配列の長さは 20 で、5 つの値のみを入力しています: for(int i=1; i<6; i++){. それはnull値を説明しています。

于 2012-11-15T21:40:51.810 に答える
2
  1. 配列のサイズは20ですが、ループの反復回数は5回だけです。
  2. ループが間違ったインデックスから始まります(部分的に関連しています)
  3. word配列にデータが実際に入力される前に、配列のランダムポーリングを実行しています。

次の場所から変更します。

for(int i=1; i<6; i++){         
    String temp = prob.getProperty(""+i);
    word[i] = temp;
    Random ran = new Random ();
    String Val = word[ran.nextInt(word.length)];
    System.out.println(Val);
}

に:

for(int i=0; i<20; i++){         
    String temp = prob.getProperty(""+i);
    word[i] = temp;
}

for(int i=0; i<20; i++){
    Random ran = new Random ();
    String Val = word[ran.nextInt(word.length)];
    System.out.println(Val);
}
于 2012-11-15T21:43:57.280 に答える
0

がランダムに選択されたインデックスのキーに対して null を返すため、出力が nullprob.getPropertyになる可能性がありますが、ランダムに生成されたインデックスが 5 つの値の範囲外にある可能性が高いです。

2 つの推奨事項:

  1. 例外を無視しないでください。ほとんどprobの場合、例外が原因でロードに失敗しています。代わりに、例外を出力します: e.printStackTrace().

  2. wordsロードされると予想されるプロパティに、配列の入力時に存在すると想定されるキー 1 ~ 5 が実際に含まれていることを確認してください。

于 2012-11-15T21:43:08.203 に答える