java - 随机数生成器正在生成巨大的负数

标签 java random

所以我正在创建一个随机代码,它不一定与这个级别的任何内容相关,但我更多的是测试一些想法。因此,由于某种原因,我的代码将随机工作,但在大多数情况下,它会抛出一个随机负数,通常在 -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);
           }
     }
  }
}

最佳答案

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 的伤害量。

关于java - 随机数生成器正在生成巨大的负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19718246/

相关文章:

Java程序打印出可被其他数字整除的数字

java - 避免 Java setter 的 null 检查

Java : a WebService asking embeded in a AsyncTask

java - 从 Firebase 数据库获取随机值

algorithm - 如何只用 Random(0,1) 实现 Random(a,b)?

java - 垃圾收集载入画面

java - 如何使用 Eclipse 调试 Web 服务

c++ - 最小值和最大值之间的随机双倍

Java:对列表的随机数字范围进行排序+组织它(冒泡排序)+获取最大的生成数字

python - 与 random.seed() 一起使用的建议种子值是多少?