让用户输入整数

问题描述 投票:0回答:2

我想制作一个程序,不断提示用户输入整数(来自 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");

关于我如何进一步进行的任何提示?

java java.util.scanner user-input
2个回答
1
投票

你需要做这样的事情:

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;
}

0
投票

这将满足您的需求:

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.