让用户输入整数

Get user to input integers

提问人:bluebrigade23 提问时间:4/14/2014 最后编辑:Not a bugbluebrigade23 更新时间:11/13/2023 访问量:164

问:

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

评论

1赞 caitlin 4/14/2014
你用什么语言编程?
0赞 bluebrigade23 4/14/2014
对不起,我的错。在 java 中
1赞 Voonic 4/14/2014
至少你应该标记你正在使用的语言
0赞 Rong Nguyen 4/14/2014
请出示您尝试过的代码!
1赞 JB Nizet 4/14/2014
我们不会做你的功课。发布你所拥有的,并解释你的具体问题。

答:

1赞 Daksh Shah 4/14/2014 #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) 运算符的作用是在两个语句都为真时执行,但如果任何条件都为真,则 (OR) 运算符有效。&&||&&||

如果你说while(!in.hasNext(“X”) || !in.hasNext(“x”))',这是有道理的。理解?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

最后,关于如何计算平均值......,为此,您需要做的是将所有输入变量存储到一个数组中,然后取出该数组的平均值,或者您可以考虑一下并自己编写一些代码。比如去掉均值,你可以做一个变量,然后继续添加用户输入的整数,并保留一个变量,该变量将保持输入的整数数的计数,最后你可以将它们两者相除得到你的答案sumcount

更新:为了检查最小值和最大值,您可以做的是创建 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赞 bluebrigade23 4/14/2014
的 ||似乎不起作用。但是&&工作正常。对于问题的第二部分,找到最大和最小数字;这会出现在 while 语句中吗?我将在哪里存储用户的这些值?
0赞 Daksh Shah 4/14/2014
@user3530880 您可以将它们存储在数组中,但为此您不需要存储它们,只需再创建两个变量,并在其中保留最小和最高的 int,并且每次用户输入新变量时检查它是否小于 min,将其存储到并检查它是否>大于 max,将其存储在 max 中,依此类推......明白了?如果是,您可以为我的答案投赞成票,如果它满足您的需求,也可以在它旁边打勾minmaxmin
1赞 stevecross 4/14/2014
这是错误的。参见德摩根定律:en.wikipedia.org/wiki/De_Morgan%27s_laws。你可以写成 .||!in.hasNext("X") && !in.hasNext("x") == !(in.hasNext("X") || in.hasNext("x"))
0赞 bluebrigade23 4/14/2014
我真的是编程新手,我不知道如何保持最小值和最大值并不断检查。不过,我尝试一下。
1赞 stevecross 4/14/2014
是的,我的意思是括号。目前它是.这与 相同。你建议写 ,这和.这仅计算为当两个输入同时为 时。但这是不可能的,你要保持在循环中。!a && !b!(a || b)!a || !b!(a && b)falseXx
0赞 stevecross 4/14/2014 #2

这将满足您的需求:

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

评论

0赞 Daksh Shah 4/14/2014
我认为只是添加所有代码不是一个好的做法,没有冒犯,但那家伙是新来的。你可以告诉他如何阅读,并给他一些代码,但你不应该只给他所有的代码。你应该告诉他如何编码,但不应该为他编写所有代码
0赞 bluebrigade23 4/14/2014
@feuerball谢谢你的回答,但我没有理解一半。所以我可能会继续试一试,试着去理解它。如果我在理解东西时遇到问题,我肯定会恢复。
0赞 stevecross 4/14/2014
你有什么不明白的?
0赞 bluebrigade23 4/14/2014
@feuerball感谢您在代码中的评论。现在更容易理解了。:)