当前位置: 首页 > 知识库问答 >
问题:

Java - 如何继续要求用户输入?

凌波峻
2023-03-14

我已经看了这个程序几个小时了,但我仍然不明白其中的逻辑。程序要求用户输入整数。

一旦用户输入了整数,它将向用户输出所有的正数、负数和输入的总数,以及这些数字的平均值。

这是我陷入困境的地方:

然后它会询问用户是否要继续。用户将输入'y''n'以指示他们是否要继续。如果用户输入“y”,循环将再次进行,如果他们输入“n”,它将显示再见消息。我不知道如何设置。

我已经尝试了一个 do while 循环,我目前正在为该程序使用一个 while 循环。我还缺少一个语句,该语句让用户知道,如果没有输入其他数字,则仅输入零。我也不知道如何设置它,但我尝试了if语句,但它不起作用。我的代码在下面。我使用的是 Java 8。

公共类CountPositiveNegativeAndAverageOfIntsProgram{

public static void main(String [] args)
{

     System.out.print("Enter an integer, the input ends if it is 0: ");
     //Creating a scanner object
    Scanner input = new Scanner(System.in);
    int userInput = input.nextInt();

    //creating variables that will be used in the program.
    int countPositive = 0;
    int countNegative = 0;
    int total = 0;
    double average = 0;

    while(userInput != 0)
    {            

        if(userInput > 0)
        {
        //using a counter to add how many positive numbers are entered.
        countPositive++;
        }
        else
        {
          countNegative++;      
        }

        total += userInput;
        //I added 0.0 to avoid integer division. This felt like a small hack.
        average = total / (countPositive + countNegative + 0.0);
        userInput = input.nextInt();

    }      

     System.out.println("The number of positives is: " + countPositive);
     System.out.println("The number of negatives is: " + countNegative);
     System.out.println("The total is: " + total);
     System.out.println("The average is : " + average);

     System.out.print("Continue? (y/n) ");
     String s = input.next();




}

}

共有1个答案

白学
2023-03-14

一个好的解决方案只是创建一个函数,当用户提供y作为响应时,您可以在其中递归调用。

    public static void main(String [] args) {
        request();
    }

    private static void request() {
        System.out.println("Enter an integer, the input ends if it is 0: ");
        //Creating a scanner object
        Scanner input = new Scanner(System.in);
        int userInput = input.nextInt();

        //creating variables that will be used in the program.
        int countPositive = 0;
        int countNegative = 0;
        int total = 0;
        double average = 0;

        while(userInput != 0)
        {

            if(userInput > 0)
            {
                //using a counter to add how many positive numbers are entered.
                countPositive++;
            }
            else
            {
                countNegative++;
            }

            total += userInput;
            //I added 0.0 to avoid integer division. This felt like a small hack.
            average = total / (countPositive + countNegative + 0.0);
            userInput = input.nextInt();

        }

        System.out.println("The number of positives is: " + countPositive);
        System.out.println("The number of negatives is: " + countNegative);
        System.out.println("The total is: " + total);
        System.out.println("The average is : " + average);

        System.out.println("Continue? (y/n) ");

        String response = input.next();

        if (response.equals("y")) {
            request();
        } else {
            System.out.println("Goodbye!");
        }
    }

Java8解决方案如果你真的想改进一下,你可以做一些事情。

  • 使用扫描器#hasNextInt确定扫描器是否有要使用的整数
  • 不要使用多个变量来跟踪负、正和总计,而是维护一个表示输入的整数对象列表
  • 使用Stream#filter检查正负值,然后使用count()告诉我们流中与此过滤器匹配的元素数
  • 使用IntStream#sum和IntStream#average分别确定整数流的和和和平均值
    private static void request(Scanner scanner) {
        System.out.println("Enter an integer, the input ends if it is 0: ");

        List<Integer> values = new ArrayList<>();

        while(scanner.hasNextInt()) {
            int value = scanner.nextInt();

            if (value == 0) {
                break;
            }
            values.add(value);
        }
        System.out.println("The number of positives is: " + values.stream().filter(value -> value > 0).count());
        System.out.println("The number of negatives is: " + values.stream().filter(value -> value < 0).count());
        System.out.println("The total is: " + values.stream().mapToInt(value -> value).sum());
        System.out.println("The average is : " + values.stream().mapToInt(value -> value).average().orElse(0));
        System.out.println("Continue? (y/n) ");

        String response = scanner.next();

        if (response.equals("y")) {
            request(scanner);
        } else {
            System.out.println("Goodbye!");
        }
    }
 类似资料:
  • 我正在做一个简单的主菜单项目。我必须检查用户输入的有效性:1)他是否输入了1和7之间的选项(是吗)2)他是否输入了整数。 对于第二,我想使用try-and-catch,但没有成功。用户输入非整数后,它将打印异常(在catch块中),并返回main。我想一直要求用户输入,直到他输入1-7

  • 我正在写一个叫做hangman.py的程序。在我的程序中,用户不能在我的输入中输入“?”或空白。例如,用户不能输入“?xx?xx?”或“我该怎么做”。但用户可以输入诸如“ldkdjgg”或“stop-go”之类的内容。如果用户输入诸如“?xxxxx”或“我该怎么做”之类的内容,我必须不断询问用户请输入一个不包含的要猜测的单词?或空白:“.我的问题是如何打印”请输入一个不包含字符的要猜测的单词?或空

  • 我需要使用while循环来询问用户一个介于1-100之间的数字,如果用户输入的数字是负数或超过100,我会告诉用户他们输入了错误的数字。这是我到目前为止的情况。每当我运行它时,它都会要求用户输入。当输入为负数或大于100时,它表示无效数字,而当用户输入为45时,当0-100之间的数字有效时,它仍表示无效数字。我不认为这是阅读代码的最后一部分。

  • 我对java非常陌生,需要帮助。基本上,我有一个程序,要求用户输入一个数字。当输入该数字时,它会将该数字之前的所有奇数相加。我正在尝试(但失败)做的是,做另一个循环,当提示用户请求一个数字来求奇数之和时,我想让它只在输入奇数时继续,否则它将不断重复询问用户,直到他们输入奇数为止。我知道使用循环可以解决这个问题,但我不知道如何让它工作。 这是我的密码: 提前谢谢!

  • 我正在尝试创建一个文字游戏,它可以对一个单词进行加密,并根据用户输入的内容将字符移位一定的数字,解密加密,并检查该单词是否为回文。问题是我不知道如何保持输入,所以在我加密或检查它是否为回文后,程序结束,因此我无法解密加密的内容。 例如,如果用户输入单词“hello”并选择加密该单词,密钥为3,则应显示“khoor”。然后,我希望能够通过将“khor”解密回“hello”来继续,但程序结束。 此外,

  • 好的,所以我的程序工作正常,但最后它会询问用户是否要输入另一组整数,如果他们键入“是”,则该过程重新开始。我的程序正在重新开始,但它保留所有相同的用户输入,因此它只是不断重复其原始输入的相同输出。 这是我的代码 我当前的输出如下所示: 输入整数列表(以0结尾):1 输入整数列表(以0结尾):2 输入整数列表(以 0 结尾):-1 输入整数列表(以0结尾):3 输入整数列表(以0结尾):0 阳性数量