Reputation: 99
So I am creating a random code that's not necessarily pertinent to anything at this level, but I'm more testing a few ideas. So for some reason my code will work randomly, but for most of the time it's throwing out a random negative number usually in the vicinity of -413796084. I don't know why it's doing this and I am trying to keep the numbers in the vicinity of 0 - 50. I thought I had done it right but obviously I haven't. Also I am relatively new at Java, if that helps explain any mistakes I made.
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------------------------------------------------
So I changed my code and fixed some things and now it's just spitting out 0 every time. Maybe now it will be a little easier to figure out. But I definitely need help.
This is the new code:
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);
}
}
}
}
Upvotes: 0
Views: 1260
Reputation: 99
So I figured it out. One I'm an idiot for having my totaldmg = randamage.nextInt(); twice, but when I took out one of them I was only getting 0's. So when I changed it to totaldmg = randamage.nextInt(50) it worked perfectly. Sweet. Thanks everyone for working with me. You all are fantastic individuals.
Upvotes: 0
Reputation: 1437
Sorry my first answer was c#, changed.
What you want is
totaldmg = randamage.nextInt(50);
use 51 if you want it to generate between 0 and 50 since it is exclusive.
Or if you're going for 50+random damage between 0 and 10, use this:
totaldmg = 50 + randamage.nextInt(10);
The other answer pointed out that weird for loop and I really don't know what you're going for anymore
Lol based on your discussion below the other answer, and assuming you don't find the real answer to your problem, if the negative numbers are between 0 and -50 then just use
totaldmg = Math.abs(randamage.NextInt(50));
and if the numbers are still negative and HUGELY negative:
totaldmg = Math.abs(randomage.NextInt(50)) % 50;
Awful, awful fix, but if it's honestly a bug or something this would be about as good in theory
Upvotes: 1
Reputation: 3302
totaldmg = randamage.nextInt();
Random.nextInt() can return any legal value for an int, including the massive negative ones, which isn't likely to be the result you want here. Give nextInt
some integer as an argument to constrain it to the desired range.
also, I'd take a look at this loop because chances are that it doesn't do what you think it does.
for(int finaldmg=50;finaldmg<=50;finaldmg++){
totaldmg = randamage.nextInt(10);
}
The body of the loop executes only once and totaldmg
is overwritten right after the loop anyway.
EDIT: if you want just to generate a number between 0 and 50, you can just replace this:
for(int finaldmg=50;finaldmg<=50;finaldmg++){
totaldmg = randamage.nextInt(10);
}
totaldmg = randamage.nextInt();
with this:
totaldmg = randamage.nextInt(51);
In case you're wondering about that 51
, that is the excluded upper bound - meaning that you'll get damage amounts that are at least zero and at most 50.
Upvotes: 1