2017-02-19 2 views
-1

Добрый день,Как создать случайное число от -1000 до 1000?

Я кодирую игру «Угадай номер» в java, и я пытаюсь заставить программу сгенерировать число от -1000 до 1000, но по какой-то причине он генерирует только числа выше 1 прямо сейчас.

Что именно я сделал неправильно здесь? Может ли кто-нибудь помочь мне?

Random rand = new Random(); 
    int numberToGuess = rand.nextInt((1000 - (-1000) + 1) + (-1000)); 
    int numberOfTries = 0; 
    Scanner input = new Scanner(System.in); 
    int guess; 
    boolean win = false; 

    System.out.println("Lets begin."); 

    while (win == false && numberOfTries < 11) { 

     System.out.println("Insert a number:"); 
     guess = input.nextInt(); 
     numberOfTries++; 


     if (guess == numberToGuess) { 
      win = true; 
     } 

     else if (guess < numberToGuess) { 
     System.out.println("Your guess is too low."); 
     } 

     else if (guess > numberToGuess) { 
     System.out.println("Your guess it too high."); 
     } 


    } 

    if (win == true) 
    System.out.println("You won with " + numberOfTries + " attempts. The hidden number was " + numberToGuess + "."); 

    else if (numberOfTries == 11) { 
     System.out.println("You lost. The number was " + numberToGuess + "."); 
    } 



} 


} 
+2

'новый Random() nextInt (2000). - 1000' – Jameson

+0

' rand.nextInt ((1000 - (-1000) + 1) + (-1000)) 'так же, как' rand.nextInt (1001) '. –

ответ

2
int numberToGuess = rand.nextInt(2001) -1000; 

Подумайте о # внутри paranthesis как пролете случайное # может достичь. Добавьте 1 к вашему диапазону, потому что .nextInt upper Bound является эксклюзивным. Затем вы хотите перевести этот диапазон от 0 до 2000 на -1000 до 1000 с помощью вычитания.

+0

Спасибо вам большое! Вы сумели это объяснить мне очень хорошо, и теперь все работает отлично. Еще раз спасибо! – Lunarixx

+0

Нет проблем. Спасибо за вклад и, пожалуйста, примите мой ответ (: –

+0

['nextInt (int bound)'] (https://docs.oracle.com/javase/8/docs/api/java/util/Random.html#nextInt-int -) является * upper-exclusive *, поэтому 'nextInt (2000)' возвращает число от 0 до 1999 * (включительно) *. Чтобы получить число от -1000 до 1000 * (включительно) *, вам нужно 'rand.nextInt (2001) - 1000' – Andreas

0
int numberToGuess = rand.nextInt((1000 - (-1000) + 1) + (-1000)); 

у вас есть 1000 и -1000, так что будет равен нулю, используя rand.nextInt()

 rand.nextInt(2001) -1000; 

с использованием Math.random()

 (int)(Math.random() *2001 +1) - 1001 
0

Я использую ниже

int numberToGuess = rand.nextInt((1000 - (-1000)) + 1) + (-1000); 

И я получаю ниже результатов

-727 
-971 
-339 
84 
295 
498 
.... 
+0

Действительно? Я пробовал много раз и никогда не получал результат под 0 по какой-то причине. – Lunarixx

+0

Да. Я думаю, почему он не работает для вас, потому что цикл составляет всего 11 .. Сделайте одну вещь, запустите цикл 100 раз и закомментируйте остальную часть кода за минуту. Я верю, что вы увидите отрицательные числа. Если это так, как и мой ответ. – DNAj

+0

Это не то, что у него было выше. «выключен») ». –

0

использовать другое случайное число, чтобы принять решение.

int numberToGuess = rand.nextInt(1001); 
    int sign = rand.nextInt(2); 
    if(sign==0){ 
     numberToGuess*=-1; 
    } 
Смежные вопросы