1

わかりましたので、私はこれに困惑しました...

私が達成しようとしているのは、0 から 9 までの一連の数字を生成することです。数字の生成後、画面上のテキストフィールドに入力したいと思います。乱数をキーコードに変更することを除いて、すべての基本的な機能が動作するようになりました。現在、キーコードに変換すると0になります。

これが私のコードです:

public void random() {
    int rand = new Random().nextInt(10);
            System.out.println(""+rand);
    convert();
}

public void convert() {
    switch (rand) {
    case 0:
        rand = KeyEvent.VK_0;
                    System.out.println(""+0);
        break;
    case 1:
        rand = KeyEvent.VK_1;
                    System.out.println(""+1);
        break;
    case 2:
        rand = KeyEvent.VK_2;
                    System.out.println(""+2);
        break;
    case 3:
        rand = KeyEvent.VK_3;
                    System.out.println(""+3);
        break;
    case 4:
        rand = KeyEvent.VK_4;
                    System.out.println(""+4);
        break;
    case 5:
        rand = KeyEvent.VK_5;
                    System.out.println(""+5);
        break;
    case 6:
        rand = KeyEvent.VK_6;
                    System.out.println(""+6);
        break;
    case 7:
        rand = KeyEvent.VK_7;
                    System.out.println(""+7);
        break;
    case 8:
        rand = KeyEvent.VK_8;
                    System.out.println(""+8);
        break;
    case 9:
        rand = KeyEvent.VK_9;
                    System.out.println(""+9);
        break;
    }
}

出力は次のとおりです。

5
0

あるべき姿:

5
53

提案/解決策はありますか?

ありがとう!!

4

4 に答える 4

2

randに初期化されたグローバル変数があると思います0

次の変更を行うと、正常に動作するはずです。

  1. の署名convertを次のように変更します。

    public void convert(int rand) 
    
  2. convertから呼び出しrandomている間、次のように呼び出します

    convert(rand);
    

編集:

上記のメソッドでint rand宣言したコメントに基づいて。random()再度宣言する必要はありませんrand

次の行を変更

int rand = new Random().nextInt(10); // a new rand variable is created local to method

rand = new Random().nextInt(10); // already declared rand variable is used.
于 2012-10-23T06:11:58.843 に答える
1

あなたのしていることは本当に奇妙に思えます。テキスト フィールドは独自のアプリにありますか? とにかく、0 を取得randする方法は、convert メソッドでインスタンス変数 () を使用する必要があり、乱数をローカル変数 (これも呼び出されますrandが、別の変数) に割り当てるためです。次のように、確率変数をパラメーターとして convert メソッドに渡します。

public void random() {
    int rand = new Random().nextInt(10);
    System.out.println(rand);
    convert(rand);
}

public void convert(int rand) {
    switch (rand) {
    ...

次に、プリントを次のように変更しますSystem.out.println(rand);

于 2012-10-23T06:10:46.580 に答える
0

ルイージは正しい。そのコードはコンパイルされません。

とにかく、どこで推測すれば、このコードはあなたのために働くかもしれません:

public void random() {
    int rand = new java.util.Random().nextInt(10);
    convert(rand);
}

public void convert(int rand) {
    int vk = 0;
    switch (rand) {
    case 0:
        vk = java.awt.event.KeyEvent.VK_0;
        break;
    case 1:
        vk = java.awt.event.KeyEvent.VK_1;
        break;
    case 2:
        vk = java.awt.event.KeyEvent.VK_2;
        break;
    case 3:
        vk = java.awt.event.KeyEvent.VK_3;
        break;
    case 4:
        vk = java.awt.event.KeyEvent.VK_4;
        break;
    case 5:
        vk = java.awt.event.KeyEvent.VK_5;
        break;
    case 6:
        vk = java.awt.event.KeyEvent.VK_6;
        break;
    case 7:
        vk = java.awt.event.KeyEvent.VK_7;
        break;
    case 8:
        vk = java.awt.event.KeyEvent.VK_8;
        break;
    case 9:
        vk = java.awt.event.KeyEvent.VK_9;
        break;
    }
    System.out.println(rand+"->"+vk);
}

VK_0throughVK_9の値は 48 ~ 57 であるため、次のようにすることもできます。

public void randomAndConvert() {
    int rand = new java.util.Random().nextInt(10);
    int vk = rand+48;
    System.out.println(rand+"->"+vk);
}

最後に、元のコードについていくつか説明します。

  • printLn は println である必要があります
  • rand は convert で宣言されません
  • rand が渡されて、t パラメータを介して変換されることはありません
  • 変換で rand が出力されることはありません

これがあなたを正しい道に導くことを願っています:)

于 2012-10-23T06:32:23.573 に答える
0

あなたはあなたのメソッドrandに対してローカルに宣言されていますrandom

int rand = new Random().nextInt(10);

convertただし、メソッド内から参照しています

switch (rand) {

これは、すでにインスタンス変数として宣言されていることを示唆しrandており(そうでない場合はコンパイルされません)、それを無視しています...

于 2012-10-23T06:16:02.737 に答える