【问题标题】:Scanner in method (do loop) not accepting greater/less than sign方法(循环)中的扫描仪不接受大于/小于符号
【发布时间】:2020-04-29 21:30:43
【问题描述】:

我有一个任务,我需要使用 java 程序制作轮盘赌程序(我正在使用 Eclipse)。该程序有一个要求,规定:给定以下方法heading,您必须为读取、验证并返回要投注的数字的 int 返回方法编写相应的定义 on,必须介于 0 和 36 之间。(标题为 public static int getNumber(Scanner stdIn))。我遇到的问题是 while 语句,因为它不能识别大于/小于符号。我该如何解决这个问题?

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

【问题讨论】:

  • 为什么要将 Scanner 对象与数字进行比较?您需要从扫描仪中读取一个数字,然后将其与您的值进行比较。

标签: java eclipse class methods java.util.scanner


【解决方案1】:

您的程序中有编译错误。这是正确编译的代码,

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(整数变量,其中 您将存储用户的选择)之外 do-while 循环。这样做是为了让 do-while 语句的 while 部分可以访问该变量。
  2. 使用Scanner 对象(stdIn)从用户那里读取一个数字,然后 将其存储在play。这样做:play = stdIn.nextInt()(假设用户将输入一个数字而不是一些 会产生错误或更准确地说引发异常的任意文本。
  3. 比较do-while部分中play的值 陈述。您所写的 stdIn &lt; 0 根本上是错误的,因为您正在将不是数字的 Scanner 对象与数字进行比较。想象一下 Scanner 有另一个对象,比如 Person。你能说 George(Person 的一个实例)大于零吗?显然你不能。你可以 假设乔治的年龄(这是一个数字)大于零,George.age &gt; 0

【讨论】:

    【解决方案2】:

    那是因为你必须在扫描仪上调用nextInt() 方法来获取实际值。

    所以在你的循环之外,声明一个int input,将它设置在循环的末尾,然后检查:

    int input;
    
    do {
        //... stuff
    
        input = stdIn.nextInt();
    } while(input < 0 || input > 36);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-22
      • 2016-02-06
      • 2012-09-27
      • 2016-01-26
      • 1970-01-01
      相关资源
      最近更新 更多