在不使用列表的情况下从用户输入中查找最大整数

时间:2014-10-11 11:09:16

标签: java

很抱歉,如果已存在相同的问题,我无法找到实际答案。

我想找出一种方法来找到用户输入值中的最大整数,而不将所有数字存储到数组中并允许负数。我遇到的问题是我无法初始化最伟大的'首先要求一个值之前的值。这就是我到目前为止所拥有的:

import java.util.Scanner;

public class FindGreatest {

    public static void main(String[] args) {
        int greatest;
        int current;
        boolean first = true;
        boolean keepGoing = true;
        boolean initialized = false;
        Scanner in = new Scanner(System.in);
        while (keepGoing) {
            System.out.print("Input an integer: ");
            String input = in.nextLine();
            if (input.equals("")) {
                keepGoing = false;
            }
            else {
                try {
                    current = Integer.parseInt(input);
                    if (first) {
                        greatest = current;
                        first = false;
                        initialized = true;
                    }
                    else if (current > greatest) {  // compiler error
                        greatest = current;
                    }
                }
                catch (NumberFormatException e) {
                    //
                }
            }
        }
        if (initialized) {
            System.out.println(greatest);  // compiler error
        }
    }

}

最后一个打印声明并没有结束,即使它看起来我不应该在那时没有初始化。

如果有人能够发现我的错误或提供更清洁的解决方案,那就很好了

编辑:初始化'最大'具有随机值也显然足以修复此特定代码段

4 个答案:

答案 0 :(得分:4)

添加:

int greatest = Integer.MIN_VALUE;

删除:

if (first) {
    greatest = current;
    first = false;
    initialized = true;
}
else if (current > greatest) {
    greatest = current;
}

添加:

if(current > greatest)
    greatest = current;

答案 1 :(得分:1)

最干净的方法是在循环开始之前读取第一个值,并使用它来初始化greatest。您可能需要额外的if来处理没有输入值的情况,但是一旦进入循环,您就不必担心这种可能性。

答案 2 :(得分:0)

您可以使用Integer的Object版本并执行如下所示的空检查:

import java.util.Scanner;

public class FindGreatest {
    public static void main(String[] args) {
        Integer greatest = null;
        Scanner in = new Scanner(System.in);

        while (true) {
            System.out.print("Input an integer: ");
            input = in.nextLine();

            if ("".eq(input)) {
                break; // out of while true loop
            }

            try {
                int current = Integer.parseInt(input);
                if (greatest == null || current > greatest) {
                    greatest = current;
                }
            } catch (NumberFormatException e) {}
        }

        if (greatest != null) {
            System.out.println(greatest);
        }
    }
}

答案 3 :(得分:0)

不使用任何布尔标志,对于无限数量的输入,我们可以获得+ ve或-ve Max值。

public static void main(String[] args) {    
    int highest=Integer.MIN_VALUE, lowest=Integer.MAX_VALUE, num=0;
    Scanner scan = new Scanner(System.in);
     while(true){              
           System.out.print("Enter a number:");
           String input = scan.nextLine();
           if (input.equals("")) {
               break;
           }else{
               num = Integer.parseInt(input);                  
               if (num > highest){  
                   highest = num;
               }                   
               if(num < lowest){                      
                   lowest = num;
               }
           }
    }
    System.out.println("Highest number is: " + highest);
}