1

l 好吧,所以我被这个难住了……

我想要实现的是生成一系列介于 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. 从调用convertrandom,调用为

    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

rand被声明为你的random方法的本地

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

convert但是你在你的方法中引用它

switch (rand) {

这表明它rand已经被声明为实例变量(否则它不会编译)并且您忽略它......

于 2012-10-23T06:16:02.737 回答
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 永远不会通过参数传递给转换
  • rand 永远不会在 convert 中打印出来

希望这会引导你走上正确的道路:)

于 2012-10-23T06:32:23.573 回答