将随机数更改为密钥代码

时间:2012-10-23 06:05:39

标签: java

lkay所以我对这个感到困惑......

我想要实现的是生成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 个答案:

答案 0 :(得分:2)

我认为您的全局rand变量已初始化为0

进行以下更改,它应该可以正常工作:

  1. convert的签名更改为以下内容:

    public void convert(int rand) 
    
  2. convert致电random时,请致电

    convert(rand);
    
  3. 编辑:

    根据您的评论,您已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.
    

答案 1 :(得分:1)

你做的事似乎很奇怪。您自己的应用中的文本字段是?无论如何,获得0的方式是因为您必须在convert方法中使用实例变量(rand)并将随机数分配给局部变量(也称为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);

答案 2 :(得分:0)

您的rand方法已将random声明为本地

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

但您是在convert方法

中引用它
switch (rand) {

这表明rand已经被声明为实例变量(否则它将无法编译)而你忽略它......

答案 3 :(得分:0)

Luiggi是对的。该代码无法编译。

无论如何,如果我在哪里猜测,这段代码可能适合你:

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_0VK_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永远不会在转换中声明
  • rand永远不会传递给转换参数
  • rand永远不会在转换中打印出来

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