首先,我今年正在参加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();
}
}
如果可能,以下是我要回答的具体问题:
这是我很长一段时间以来第一次使用Stackoverflow,所以如果有任何问题,请告诉我。
任何建议表示赞赏。谢谢!
答案 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)
我不会这么说。您的代码非常简单明了。您可以将其分解为单独的方法,以使其更清晰,更有条理,但除非您有必须重复运行的代码段或者如果您的代码长段混乱了主方法,否则这是不必要的。您也可以使用al.size()
而不是创建arrayLength
。
虽然方便,但并非完全必要。现在,关于您的下一个问题,如果您希望它具有可变大小,您肯定希望使用ArrayList
而不是常规数组,因为数组是使用固定大小创建的,无法更改
以下是一个例子:
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