2

こんにちは、私は配列を繰り返し処理し、各配列要素にランダムな値を入力しようとしています。唯一の問題は、次のような奇妙な出力が得られることです

[I@4b142196

Array Exampleで見つけたこの例

しかし、これを私のコードで使用すると機能しません。これが私が得たものです:

package h05GrootsteWaarde;
import javax.swing.*;
import java.util.*;

public class GetallenGenerator extends JPanel {
    public GetallenGenerator() {
    }
    int[] val = new int[21];
    Random generator = new Random();    
    public void setRandomValue() {
        for (int i = 0; i < val.length; i++) {
            val[i] = generator.nextInt(201) - 100;
        }    
    }   
    public int[] getRandomValue() {     
        return val;     
    }
}

そして、これが私が関数を呼び出す方法です

package h05GrootsteWaarde;
import javax.swing.*;
import java.awt.event.*;
public class Bediening extends JPanel implements ActionListener {
    GetallenGenerator generator;
    private JButton bereken;
    private JTextArea veld;

    public Bediening(GetallenGenerator generator) {     
        this.generator = generator;     
        bereken = new JButton("Bereken kleinste");
        bereken.addActionListener(this);
        add(bereken);       
        veld = new JTextArea(13, 40);
        veld.setEditable(false);
        veld.setWrapStyleWord(true);
        veld.setLineWrap(true);
        add(veld);      
        generator.setRandomValue();
    }   
    public void actionPerformed ( ActionEvent e ) {     
        String hoi = " " + generator.getRandomValue();
        veld.append(hoi);       
    }
}
4

5 に答える 5

3

toString配列のメソッドは配列の個々のメンバーを含む文字列を表示しないため、奇妙な出力が得られます。[I@代わりに、プリミティブ型の配列で始まる奇妙な文字列が表示されますint

文字列を手動で準備するかArrays.toString(myArray)、次のように呼び出す必要があります。

int[] arr = generator.getRandomValue();
String arrStr = Arrays.toString(arr);
String hoi = arrStr.substring(1, arrStr.length()-1);
于 2012-10-19T13:47:48.573 に答える
2

メソッドgenerator.getRandomValue();は整数配列を返します。したがって、それを印刷するとString Representation、配列の が印刷されます。これは、配列参照の のようなものですHashCode。したがって、空の文字列を追加して別の文字列に格納しようとすると、目的の結果が得られません。

おそらく使用できるものは次のとおりです。

String hoi = " " + Arrays.toString(generator.getRandomValue());

しかし、整数配列を String 参照に追加して格納するのはなぜですか?

ランダムな値が必要な場合は、おそらく、そのリストでArrayListand を使用してシャッフルすることができます。Collections.shuffle単一のランダム値が必要な場合は、first値を取得できます。しかし、それはランダムな値を取得するための非常に効率的な方法ではありません. それは十分にランダムではないからです。

于 2012-10-19T13:48:01.190 に答える
2

メソッド:

public int[] getRandomValue() {
    return val;
}

...配列からランダムな値を返すのではなく、配列参照自体を返します。文字列が表示されている[I@4b142196のは、これが配列の既定の文字列表現であるためです。(最初の部分はタイプを示し、2 番目の部分はハッシュ コードです。)

配列からランダムな値を取得したい場合は、実際にいくつかのランダム性をgetRandomValue...に入れる必要があります。

于 2012-10-19T13:48:02.297 に答える
0

toString生成された値が必要な場合は、メソッドをオーバーライドする必要があります。ここで記述したコードでは、生成された値ではなく、メモリ参照が提供されます。

于 2012-10-19T13:47:52.507 に答える
0

に を追加しint[]ていますJTextAreatoString()メモリ参照である int[] を呼び出した結果が表示されます。

おそらく、getRandomValue()メソッドを次のように変更する必要があります。

public String getRandomValue() {
  return Arrays.toString(val);
}
于 2012-10-19T13:46:55.907 に答える