我想制作一个程序,不断提示用户输入整数(来自 CUI),直到收到用户的“X”或“x”。 然后程序打印出输入数字的最大数、最小数和平均值。
我确实设法让用户输入数字,直到有人输入“X”,但如果有人输入“x”和第二位,我似乎无法让它停止。
这是我设法解决的代码:
Scanner in = new Scanner(System.in);
System.out.println("Enter a number")
while(!in.hasNext("X") && !in.hasNext("x"))
s = in.next().charAt(0);
System.out.println("This is the end of the numbers");
关于我如何进一步进行的任何提示?
你需要做这样的事情:
Scanner in = new Scanner(System.in);
System.out.println("Enter a number")
while(!(in.hasNext("X") || in.hasNext("x")))
s = in.next().charAt(0);
System.out.println("This is the end of the numbers");
每当您使用 while 循环时,您都必须使用 {} 以防 while 块中的参数超过 1 行,但如果它们只是一行,那么您可以继续而不使用
{}
。
但是我想你遇到的问题是使用
&&
而不是 ||
。 &&
(AND) 运算符的作用是,如果两个语句都为 true,则执行,但 ||
(OR) 运算符在任何条件为 true 时才起作用。
如果你说
while(!in.hasNext("X") && !in.hasNext("x")) it makes no sense as the user input is not both at the same time, but instead if you use
while(!in.hasNext("X") || !in.hasNext("x"))` 这是有道理的。明白了吗?
最后,关于如何计算平均值...,为此,您需要做的是将所有输入变量存储到一个数组中,然后取出其平均值,或者您可以考虑它并编写一些代码你自己。就像取出平均值一样,您可以创建一个变量
sum
,然后继续添加用户输入的整数,并保留一个变量count
,它将保留输入的整数数量,最后您可以将两者相除其中有你的答案
更新:为了检查最小值和最大值,您可以做的是创建 2 个新变量,例如
int min=0, max=0;
,当用户输入新变量时,您可以检查
//Note you have to change the "userinput" to the actual user input
if(min>userinput){
min=userinput;
}
和
if(max<userinput){
max=userinput;
}
这将满足您的需求:
public void readNumbers() {
// The list of numbers that we read
List<Integer> numbers = new ArrayList<>();
// The scanner for the systems standard input stream
Scanner scanner = new Scanner(System.in);
// As long as there a tokens...
while (scanner.hasNext()) {
if (scanner.hasNextInt()) { // ...check if the next token is an integer
// Get the token converted to an integer and store it in the list
numbers.add(scanner.nextInt());
} else if (scanner.hasNext("X") || scanner.hasNext("x")) { // ...check if 'X' or 'x' has been entered
break; // Leave the loop
}
}
// Close the scanner to avoid resource leaks
scanner.close();
// If the list has no elements we can return
if (numbers.isEmpty()) {
System.out.println("No numbers were entered.");
return;
}
// The following is only executed if the list is not empty/
// Sort the list ascending
Collections.sort(numbers);
// Calculate the average
double average = 0;
for (int num : numbers) {
average += num;
}
average /= numbers.size();
// Print the first number
System.out.println("Minimum number: " + numbers.get(0));
// Print the last number
System.out.println("Maximum number: " + numbers.get(numbers.size() - 1));
// Print the average
System.out.println("Average: " + average);
}