我的扫描仪方法不起作用,而while循环不会中断

时间:2017-01-29 19:50:43

标签: java if-statement exception while-loop java.util.scanner

我是初学者,不知道我的课程有什么问题。

我希望程序要做的是允许用户输入一个低于MAX(1 000 000 000)但大于0的整数。我也使用try和{放置了一个异常块{1}}方法使用户无法输入String。

异常块有效,但它也打印catch块内的语句,这是我不想要的。

这是控制台打印的内容:

if

我只希望在用户输入字符串后打印... Number of marbles to divide: *three* Please enter a number not a word Try again: Please enter a number under 1 000 000 000 and above 0 Try again: 。我的意思是,如果用户输入了字符串,我希望方法的while循环中断。

我似乎无法解决的另一个问题是,如果用户输入的值超过MAX(1 000 000 000),程序将继续。这是控制台打印的内容。

Please enter a number not a word Try again:

正如您所看到的,即使用户输入了超过MAX的整数(1 000 000 000),程序也会继续

这是我的代码:

Number of marbles to divide: 
1000000001
Number of people: 

1 个答案:

答案 0 :(得分:2)

我知道如果你对Java完全陌生,Java会有多难。因为我不是那些希望你的问题得到完美写作并且能够完成任务的人之一,所以我为你解决了问题。

我不得不重新组织并挤压你的代码。我必须发表一些关于清洁代码的评论:

  • Java中的方法名称始终以小写字母_或$
  • 开头
  • 如果您不需要全局变量,请
  • 避免重复使用名称不同的方法

我希望这段代码能为您提供JAVA的良好开端。玩得开心!

import java.util.*;

public class MarblesApp
{
    private final static int MAX = 1000000000;

    static Scanner input = new Scanner(System.in);

    public static void main(String[] args) 
    {
        int numberOfMarbles, numberOfPeople, marblesPerPerson, marblesLeftOver;

        System.out.println("Welcome to the marble divvy-upper.");
        System.out.println("This program will tell you how many marbles to give to each person.\n"
    + "The maximum amount of marbles is 1 000 000 000. The maximum amount of people is the same.\n");

        System.out.println("Number of marbles to divide: ");
          numberOfMarbles = getNumberFromConsole();

        System.out.println("Number of people: ");
          numberOfPeople = getNumberFromConsole();

        marblesPerPerson = (int)numberOfMarbles / numberOfPeople;
        marblesLeftOver = (int)numberOfMarbles % numberOfPeople;

        System.out.println("Give each child " + marblesPerPerson + " marbles."); 
        System.out.println("You will have " + marblesLeftOver + " marbles left over.");
    }

    public static int getNumberFromConsole()
    {
        int number;

        while (true)
        {
            try 
            {   
                // get the number from console
                number = input.nextInt();

                // validate whether it's greater zero and lower MAX
                if(validateNumber(number) == true) 
                {
                    // if true, return the number
                    return number;
                } 
                else
                {
                    // if not, input again
                    input.next(); 
                }
            }
            catch (InputMismatchException e)
            {
                System.out.println("Please enter a number not a word\nTry again: ");
                input.next(); 
            }
        }
    }

    private static boolean validateNumber(int number) {

        if(number > MAX || number == 0)
        {
            System.out.println("Please enter a number under 1 000 000 000 and above 0\nTry again: ");
            return false;
        }

        return true;
    }
}