Сканер в методе (do l oop) не принимает знак больше / меньше знака - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть задание, в котором мне нужно сделать программу для рулетки, используя программу java (я использую Eclipse). В программе есть требование, которое гласит: Учитывая следующий метод заголовок , вы должны написать соответствующее определение для метода возврата int, который считывает, проверяет и возвращает число для ставки, должно быть от 0 до 36. (Заголовок: publi c stati c int getNumber (Scanner stdIn) ). У меня проблема с оператором while, потому что он не распознает символ «больше / меньше». Как мне go исправить это?

import java.util.Scanner;
public class Program08 
{
    public static void main(String[]args)
    {
    welcome();
    Scanner stdIn = new Scanner(System.in);
    int number;
    number = getNumber(stdIn);

    }
public static void welcome()
{
    System.out.println("Welcome to Roulette!");
    System.out.println("Number bets payout: 35:1");
}
public static int getNumber(Scanner stdIn)
{
    do
    {
        //int play;
        System.out.println("Enter the number to bet on [0-36]: ");
        //play = stdIn.nextInt;
    }
    while (stdIn<0 || stdIn>36);

}
}//end of program

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

В вашей программе есть ошибки компиляции. Вот код, который правильно компилируется:

import java.util.*;

public class Program08{

    public static void main(String[] args){
            welcome();
        Scanner stdIn = new Scanner(System.in);
        int number;
        number = getNumber(stdIn);
    }

    public static void welcome(){
      System.out.println("Welcome to Roulette!");
      System.out.println("Number bets payout: 35:1");
    }

    public static int getNumber(Scanner stdIn){
        int play = 0;
        do{
          System.out.println("Enter the number to bet on [0-36]: ");
          play = stdIn.nextInt();
      } while (play < 0 || play > 36);
        return play;
    }
}

Какие были исправления:

  1. В getNumber() объявляется play (целочисленная переменная, в которой вы собираетесь хранить выбор пользователя) вне пределов времени l oop. Это делается для того, чтобы секция while оператора do-while могла получить доступ к этой переменной.
  2. Используйте объект Scanner (stdIn), чтобы прочитать число пользователя и сохранить его в play. Это делает это: play = stdIn.nextInt() (при условии, что пользователь введет число, а не какой-либо произвольный текст, который приведет к ошибке или, точнее, вызовет исключение ).
  3. Сравните значение play в секции while оператора do-while. То, что вы написали, stdIn < 0 в корне неверно, поскольку вы сравниваете объект Scanner, который не является числом, с числом. Представьте вместо Scanner другого объекта, скажем, Person. Не могли бы вы сказать, что Джордж (экземпляр Person) больше нуля? Очевидно, вы не можете. Вы можете сказать, что возраст Джорджа (который является числом) больше нуля, George.age > 0.
0 голосов
/ 30 апреля 2020

Это потому, что вы должны вызвать метод nextInt() на сканере, чтобы получить фактическое значение.

Так что вне вашего l oop, объявите int input, установите его в конце l oop и затем проверьте, что:

int input;

do {
    //... stuff

    input = stdIn.nextInt();
} while(input < 0 || input > 36);
...