虽然循环Int在方法内返回完全死了

时间:2017-10-20 06:13:44

标签: java methods while-loop int

我的任务是写一个方法:

public static int collectInteger(String prompt, int minimum, int maximum) 

while循环中收集用户的输入,并按照下面的方式处理(#1),但当然它不起作用,因为它无法读取方法的输入......这实际上是我的教授所建议的...简单的东西在方法中很容易,但是在方法中循环做然后再在主要中再次重做整个血腥的东西是没有意义的。 我用方法中的布尔值重写了它 - 工作正常..没有方法写它 - 当然也是有效的。但我不能把我的头围绕这个while循环和int方法...... 这是我们第二天使用方法和家庭作业就像课堂作业一样。 谢谢你的建议!

// #1 this is what prof suggested...

public static int collectInteger(String prompt, int minimum, int maximum){
        // make sure that the value is an int
        while (true) {
              if (in.hasNextInt()) {
                     int value = in.nextInt();
                     if (value >= minimum && value <= maximum){
                            return value;
                     }
              } else {
                     System.out.println("Error Message");
              }
        }
}
//#2 this is what I could come up with that doesn't work of course...

public static int collectInteger(int minimum, int maximum){
        while (true){
            if (value >= minimum && value <= maximum){
                return value;       
            }
        }
    }

public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            final int MINIMUM =0, MAXIMUM =100;

            System.out.print("Enter a number of cats. ");
            int catsNumber = in.nextInt(); 
            int catsInput =  collectInteger (MINIMUM, MAXIMUM);
            if (catsNumber == catsInput){
                System.out.printf("Your number of cats was %d", catsNumber);
                in.hasNextInt();
            }else {
                System.out.println("Value needs to be an integer between 0 and 100. Please try again.");
            }
            in.close();     
        }
    }

//结果应该很简单...如果输入是btw 0100,打印输入猫的数量,如果不是 - 打印错误消息。但最小值和最大值应该先用方法写出......

2 个答案:

答案 0 :(得分:3)

如果你想要一个方法要求用户输入一个输入,直到它在一个范围内,那么循环应该在教授建议的方法中。否则,在这种情况下你有一个任务“从用户那里得到输入,直到它在正确的范围内”,但你在不同的地方分开逻辑,这使得它更难以遵循。

如果您注意到教授方法处理值和输入的检查。如果你在main方法中有输入(正如你所做的那样),那么在方法中你应该传递你从使用过的输入中读取的值(方法中的“值”)。

因此,一种解决方案是将扫描仪添加到教授建议的方法中,以便您可以在那里读取输入:

<link type="text/css" rel="stylesheet" href="css/bootstrap.min.css"/>
<script type="text/javascript" src="js/popper.min.js"></script>

当你在方法中处理了那么复杂的逻辑时,你的主要就像这样简单:

+---assets
¦   +---css
¦   +---js

我会保持扫描仪初始化并关闭main,因为这种方法可以与其他输入源一起使用 - 而不仅仅是键盘;)

另外请小心使用System.in中的这些扫描仪,因为如果关闭扫描仪,它也会关闭系统输入流,如果你需要阅读其他内容,它将无法正常工作

答案 1 :(得分:1)

根据您的描述,我更改了一些代码,并添加了另一个系统来检查继续或退出。这有效:

public static boolean CheckcollectInteger(int inputValue,int minimum, int maximum){
            if (inputValue >= minimum && inputValue <= maximum){
                return true;       
            }else {
                return false;
            }
    }

   public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            final int MINIMUM =0, MAXIMUM =100;

            while(true){
                System.out.print("Enter a number of cats :");
                int catsNumber;
                //check input is integer or not
                try{
                    catsNumber = in.nextInt();
                }catche(Exception e){
                   System.out.println("Value needs to be an integer. Try again");
                   continue;
                }
                //check input valie is btw 0-100 or not
                boolean catInputCheck =  CheckcollectInteger(catsNumber,MINIMUM, MAXIMUM);
                if (catInputCheck){
                    System.out.printf("Your number of cats was %d", catsNumber);
                }else {
                    System.out.println("Value needs to be an integer between 0 and 100. Please try again.");
                }

                //----check continue or exit system
                System.out.print("Do you want to continue ? (yes / no)");
                String isContinue = in.nextLine();
                if(isContinue.equals("no") || isContinue.equals("NO")){
                    break; //exit loop
                }
            }
            in.close();     
        }