虽然声明麻烦Java

时间:2015-05-20 13:32:25

标签: java

当我在制作一个模拟骰子的程序时,我遇到了一个问题。 这是我写的代码(我知道它不是很好的编程,但我正在学习)。它有效,当然我知道其中有不必要的部分,但不是问题。

 double x ;
 String z ;
 x = Math.random() ;
 z = Double.toString(x) ;
 z = z.substring(2, 3) ;

 while (x>6 || x<1) {

     x =Math.random() ;
     z = Double.toString(x);
     z = z.substring(2, 3) ;
     x = Integer.parseInt(z ); 
 }

 z = Double.toString(x );
 z = z.substring(0, 1) ; 

 JOptionPane.showMessageDialog(null, "Antal prickar: "+z); 

问题是看到我错误的在while循环中有一个if语句,它在几周前工作,现在当我重写代码时它不起作用。

double x ;
String z ;
x = Math.random() ;
z = Double.toString(x) ;
z = z.substring(2, 3) ;

while (x>6 || x<1) {

    if (x>6) {
        x =Math.random() ;
        z = Double.toString(x);
        z = z.substring(2, 3) ;
        x = Integer.parseInt(z ); 
    }
}

z = Double.toString(x );
z = z.substring(0, 1) ; 

JOptionPane.showMessageDialog(null, "Antal prickar: "+z);   

任何人都可以解释为什么它不起作用,因为我应该能够将if语句放在while循环中而不会给我错误吗?

2 个答案:

答案 0 :(得分:2)

假设您之前的代码正在运行(并且在样式等上跳过评论),主要问题似乎是添加了if语句。

考虑x = 0的情况:

while( x > 6 || x < 1)将在条件满足后运行(x小于1)。

if(x > 6)虽然不满意(x不大于6),因此永远不会更新x,导致无限循环。

顺便说一下,我不使用Math.random()而是创建Random的新实例,然后调用nextInt(6) + 1获取1到6之间的随机整数(包括两者):< / p>

Random rand = new Random(); //you might want to store this elsewhere and reuse the instance
int dice = rand.nextInt(6) + 1; //done, random integer between 1 and 6

答案 1 :(得分:0)

您似乎正在使用java.lang.Math.random()生成介于1和6之间的数字。当random()调用返回0.0到1.0间隔内标准化的值时,您选择第一个小数作为候选如果价值超出限制,请重复random()来获取新的候选人号码。

在您发送的第二个代码段(您说无法正常工作)中,格式显示while循环仅包含if语句,而这语句只会在x > 6时执行,但x永远不会超过6,因为值介于0和1之间。

在while循环之前的第一个块中可能缺少此行:

x = Integer.parseInt(z ); 

循环中的if条件将被删除。

编辑以生成1到6之间的随机值,我可以做的最简单的代码是:

new java.util.Random().nextInt(6) + 1