0

所以我正在创建一个随机代码,它不一定与这个级别的任何东西相关,但我更多的是测试一些想法。所以由于某种原因,我的代码会随机工作,但在大多数情况下,它会抛出一个随机负数,通常在 -413796084 附近。我不知道它为什么这样做,我试图将数字保持在 0 - 50 附近。我以为我做得对,但显然我没有。如果这有助于解释我犯的任何错误,我在 Java 方面也相对较新。

import java.util.Scanner;
import java.util.Random;
class damagecalc {
public static void main(String args[]){
    Scanner input = new Scanner(System.in);
    Random randamage = new Random();
    int totaldmg;

System.out.println("Will you (a) attack, (s) defend, (d) skip your turn, (f)         magic,     (i) use an item?");

    String dmgString = input.next();

    char dmgChar = dmgString.charAt(0);


    if(dmgChar == 'a'){
        for(int finaldmg=50;finaldmg<=50;finaldmg++){
        totaldmg = randamage.nextInt(10);
            }
    totaldmg = randamage.nextInt();
    if(totaldmg >= 50){
        System.out.println("You have defeated the monster!");
    }else{
        System.out.println("Damage Dealt:" + totaldmg);
        }
    }
  }
}

编辑 - - - - - - - - - - - - - - - - - - - - - - - -

所以我改变了我的代码并修复了一些东西,现在它每次都吐出 0。也许现在它会更容易弄清楚。但我绝对需要帮助。

这是新代码:

import java.util.Scanner;
import java.util.Random;
class damagecalc {
public static void main(String args[]){
    Scanner input = new Scanner(System.in);
    Random randamage = new Random();
    int totaldmg;

    System.out.println("Will you (a) attack, (s) defend, (d) skip your turn, (f) magic, (i) use an item?");

    String dmgString = input.next();

    char dmgChar = dmgString.charAt(0);


    if(dmgChar == 'a'){
        for(int finaldmg=1;finaldmg<=50;finaldmg++){
            }
        totaldmg = randamage.nextInt(1);
        if(totaldmg >= 50){
            System.out.println("You have defeated the monster!");
        }else{
            System.out.println("Damage Dealt:" + totaldmg);
           }
     }
  }
}
4

3 回答 3

1
totaldmg = randamage.nextInt();

Random.nextInt() 可以为 int 返回任何合法值,包括大量的负值,这可能不是您想要的结果。给出nextInt一些整数作为参数以将其限制在所需的范围内。

另外,我会看看这个循环,因为它很可能不会像你认为的那样做。

for(int finaldmg=50;finaldmg<=50;finaldmg++){
    totaldmg = randamage.nextInt(10);
}

循环体只执行一次,并且totaldmg在循环之后立即被覆盖。

编辑:如果你只想生成一个 0 到 50 之间的数字,你可以替换这个:

for(int finaldmg=50;finaldmg<=50;finaldmg++){
    totaldmg = randamage.nextInt(10);
}
totaldmg = randamage.nextInt();

有了这个:

totaldmg = randamage.nextInt(51);

如果您对此感到疑惑51,那就是排除的上限 - 这意味着您将获得至少为零且最多为 50 的伤害量。

于 2013-10-31T23:18:17.650 回答
1

抱歉,我的第一个答案是 c#,已更改。

你想要的是

totaldmg = randamage.nextInt(50);

如果您希望它生成 0 到 50 之间的值,请使用 51,因为它是独占的。

或者,如果您要在 0 到 10 之间造成 50+ 随机伤害,请使用以下命令:

totaldmg = 50 + randamage.nextInt(10);

另一个答案指出了奇怪的 for 循环,我真的不知道你要做什么了


大声笑基于您在其他答案下方的讨论,并假设您没有找到问题的真正答案,如果负数介于 0 和 -50 之间,则只需使用

totaldmg = Math.abs(randamage.NextInt(50));

如果数字仍然是负数并且非常负数:

totaldmg = Math.abs(randomage.NextInt(50)) % 50;

糟糕,糟糕的修复,但如果它真的是一个错误或其他东西,这在理论上会一样好

于 2013-10-31T23:24:16.573 回答
0

所以我想通了。一个我是个白痴,因为我的 totaldmg = randamage.nextInt(); 两次,但是当我取出其中一个时,我只得到0。因此,当我将其更改为 totaldmg = randamage.nextInt(50) 时,它运行良好。甜的。谢谢大家和我一起工作。你们都是很棒的人。

于 2013-11-01T14:46:09.217 回答