所以我正在创建一个随机代码,它不一定与此级别的任何内容相关,但我更多地测试了一些想法。因此,由于某种原因,我的代码将随机工作,但在大多数情况下,它会抛出一个随机的负数,通常在-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);
}
}
}
}
EDIT ---------------------------------------------- -
所以我改变了我的代码并修复了一些东西,现在它每次只吐出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);
}
}
}
}
答案 0 :(得分: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的伤害量。
答案 1 :(得分:1)
抱歉,我的第一个答案是c#,已更改。
你想要的是
totaldmg = randamage.nextInt(50);
如果您希望它生成0到50之间,则使用51,因为它是独占的。
或者如果你要在0到10之间进行50 +随机伤害,请使用:
totaldmg = 50 + randamage.nextInt(10);
另一个答案指出循环奇怪,我真的不知道你的目标了什么
大声笑根据你在下面的另一个答案的讨论,并假设你没有找到你的问题的真正答案,如果负数介于0和-50之间,那么只需使用
totaldmg = Math.abs(randamage.NextInt(50));
如果数字仍然是负数且非常消极:
totaldmg = Math.abs(randomage.NextInt(50)) % 50;
糟糕,可怕的修复,但如果它真的是一个错误或其他东西,这在理论上会有同样的好处
答案 2 :(得分:0)
所以我明白了。一个我是一个白痴,我的totaldmg = randamage.nextInt();两次,但是当我拿出其中一个时,我只得到了0。因此,当我将其更改为totaldmg = randamage.nextInt(50)时,它的效果非常好。甜。谢谢大家和我一起工作。你们都是很棒的人。