处理号码程序

时间:2015-11-05 02:56:14

标签: java arraylist java.util.scanner

首先,我今年正在参加AP计算机科学,这个问题与我们在课堂上分配的练习有关。我编写了代码,并验证它符合我的知识要求,因此是一个搜索家庭作业答案的主题。

我正在寻找的是看是否有一种更简单的方法可以做到这一点,或者在编写我的代码时是否有任何改进之处。任何提示都会非常感激,在代码下方会提出具体问题。

练习如下:编写一个名为ProcessingNumbers的程序:

  • 接受用户输入为数字字符串
  • 打印用户提供的所有数字中最小和最大的
  • 打印用户键入的所有偶数的总和,以及键入的最大偶数。

以下是代码:

import java.util.*;
public class ProcessingNumbers {
    public static void main(String[] args) {
        // Initialize variables and objects
        Scanner sc = new Scanner(System.in);
        ArrayList<Integer> al = new ArrayList();
        int sumOfEven = 0;

        // Initial input
        System.out.print("Please input 10 integers, separated by spaces.");

        // Stores 10 values from the scanner in the ArrayList
        for(int i = 0; i < 10; i++) {
            al.add(sc.nextInt());
        }

        // Sorts in ascending order
        Collections.sort(al);

        // Smallest and largest values section
        int smallest = al.get(0);
        int largest = al.get(al.size() - 1);
        System.out.println("Your smallest value is " + smallest + " and your largest value is " + largest);

        // Sum of Even numbers
        int arrayLength = al.size();
        for (int i = 0; i < al.size(); i++) {
            if (al.get(i) % 2 == 0) {
                sumOfEven += al.get(i);
            }
        }

        System.out.println("The sum of all even numbers is " + sumOfEven);

        // Last section, greatest even number 
        if (al.get(arrayLength - 1) % 2 == 0) {
            System.out.println("The greatest even number typed is " + al.get(arrayLength - 1));
        } else {
            System.out.println("The greatest even number typed is " + al.get(arrayLength - 2));
        }


        sc.close();
    }

}

如果可能,以下是我要回答的具体问题:

  1. 我有没有想过这个?有没有更简单,更简化的方法来解决问题?
  2. 是否最需要使用ArrayList?我们还没有了解它们,但我确实得到了我的老师的批准使用它们。
  3. 我怎么可能编码它以便没有10个整数限制?
  4. 这是我很长一段时间以来第一次使用Stackoverflow,所以如果有任何问题,请告诉我。

    任何建议表示赞赏。谢谢!

3 个答案:

答案 0 :(得分:2)

不需要使用ArrayList,但由于foo,它确实使它更简单。

要删除10个整数限制,您可以询问用户他们想要输入多少个数字:

Collections.sort()

另一个注意事项是你的最后一个if-else获得最高的偶数整数不起作用,你想使用for循环,如下所示:

int numbersToEnter = sc.nextInt();
for(int i = 0; i < numbersToEnter; i++) {
    al.add(sc.nextInt());
}

答案 1 :(得分:1)

  1. 我不会这么说。您的代码非常简单明了。您可以将其分解为单独的方法,以使其更清晰,更有条理,但除非您有必须重复运行的代码段或者如果您的代码长段混乱了主方法,否则这是不必要的。您也可以使用al.size()而不是创建arrayLength

  2. 虽然方便,但并非完全必要。现在,关于您的下一个问题,如果您希望它具有可变大小,您肯定希望使用ArrayList而不是常规数组,因为数组是使用固定大小创建的,无法更改

  3. 以下是一个例子:

    int number;
    System.out.print("Please input some integers, separated by spaces, followed by -1.");
    
    number = sc.nextInt();
    while (number != -1) {
        al.add(number);
        number = sc.nextInt();
    }
    

答案 2 :(得分:1)

以下是一个解决方案:

  • 不使用Scanner(当你需要的只是一行文字时,它是重量级的)
  • 对数字数量没有严格的限制
  • 不需要询问多少个数字
  • 不会在List
  • 上浪费空间/时间
  • 未输入数字时处理案例
  • 在没有输入偶数时处理案例
  • 如果输入非整数,则NumberFormatException失败
  • 将实际逻辑移至单独的方法,因此可以进行批量测试
public static void main(String[] args) throws Exception {
    System.out.println("Enter numbers, separated by spaces:");
    processNumbers(new BufferedReader(new InputStreamReader(System.in)).readLine());
}
public static void processNumbers(String numbers) {
    int min = 0, max = 0, sumOfEven = 0, maxEven = 1, count = 0;
    if (! numbers.trim().isEmpty())
        for (String value : numbers.trim().split("\\s+")) {
            int number = Integer.parseInt(value);
            if (count++ == 0)
                min = max = number;
            else if (number < min)
                min = number;
            else if (number > max)
                max = number;
            if ((number & 1) == 0) {
                sumOfEven += number;
                if (maxEven == 1 || number > maxEven)
                    maxEven = number;
            }
        }
    if (count == 0)
        System.out.println("No numbers entered");
    else {
        System.out.println("Smallest number: " + min);
        System.out.println("Largest number: " + max);
        if (maxEven == 1)
            System.out.println("No even numbers entered");
        else {
            System.out.println("Sum of even numbers: " + sumOfEven);
            System.out.println("Largest even number: " + maxEven);
        }
    }
}

测试

Enter numbers, separated by spaces:
 1 2 3 4 5 6 7 8 9 9
Smallest number: 1
Largest number: 9
Sum of even numbers: 20
Largest even number: 8
Enter numbers, separated by spaces:
1 3 5 7 9
Smallest number: 1
Largest number: 9
No even numbers entered
Enter numbers, separated by spaces:
-9 -8 -7 -6 -5 -4
Smallest number: -9
Largest number: -4
Sum of even numbers: -18
Largest even number: -4
Enter numbers, separated by spaces:

No numbers entered