Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计算输入数的最大值和平均值_Java - Fatal编程技术网

Java 计算输入数的最大值和平均值

Java 计算输入数的最大值和平均值,java,Java,这是我的密码 import java.util.*; public class testq { public static void main (String [] args) { int max = 0; int sum = 0; int count = 0; int age, maximum; double average; Scanner sc = new Scanner(Sy

这是我的密码

import java.util.*;
public class testq
{
    public static void main (String [] args)
    {
        int max = 0;
        int sum = 0;
        int count = 0;
        int age, maximum;
        double average;

        Scanner sc = new Scanner(System.in);
        age = sc.nextInt();
        while (age != 0)
        {
            System.out.println("enter age");
            age = sc.nextInt();

            if (age < 0 && age > 120)
            {
                System.out.println("enter numbers between 1 to 120");
                age = sc.nextInt();
            }

            else
            {
                count ++;
                sum = sum + age;
                maximum = getMax(max, age);
                average = getAve(sum, count);
            }
        }
        System.out.println(" max is" + max + "average is" + average);

    }

    public static int getMax (int max, int age)
    {
        if (max < age)
        {
            max = age;
        }
        return max;
    }

    public static double getAve (int sum, int count)
    {
        double average;
        average = (double)sum / (double)count;
        return average;
    }
}
我想在每次输入无效数字时,输入1到120之间的数字


我尝试将while条件更改为(age!=0&&age>=1&&age平均值的值不是通过
main()
方法在每个逻辑路径中设置的,因此会发出警告

您可能应该在声明时对其进行初始化,例如:

double average = 0.0;

或者,您可以利用这样一个事实,即您不需要每次通过
while
循环重新计算平均值。如果您仅声明并计算一次,则在循环之后,将始终设置该值。

通过
main()的每个逻辑路径中都不会设置
平均值
方法,因此出现警告

您可能应该在声明时对其进行初始化,例如:

double average = 0.0;

或者,您可以利用这样一个事实,即您不需要每次通过
while
循环重新计算平均值。如果您仅声明并计算一次,则在循环之后,该值将始终被设置。

可以立即输入0,而不会设置平均值。因此,这将是一个er您可以将对getAve()的调用移到print语句之前(并移出while循环),因为您只需调用它一次

    average = getAve(sum, count);
    System.out.println(" max is " + max + " average is " + average);
此外,我猜你应该在你的情况下使用“或”而不是“和”

if(年龄<0 | |年龄>120)
而不是:

if (age < 0 && age > 120)
if(年龄<0&&age>120)

年龄不可能小于零且大于120。

可能会立即输入0,并且永远不会设置平均值。因此,当您尝试打印它时,这将是一个错误。您可以将对getAve()的调用移到print语句之前(并移出while循环)因为你只需要打一次电话

    average = getAve(sum, count);
    System.out.println(" max is " + max + " average is " + average);
此外,我猜你应该在你的情况下使用“或”而不是“和”

if(年龄<0 | |年龄>120)
而不是:

if (age < 0 && age > 120)
if(年龄<0&&age>120)

年龄不可能小于零且大于120。

请使用此代码,这将产生您所需的输出

public static void main(String[] args) {

        //int max = 0;
        int sum = 0;
        int count = 0;
        int age, maximum=0;
        double average= 0;

        Scanner sc = new Scanner(System.in);
        do {
            System.out.println("enter age");
            age = sc.nextInt();

            if (age <0||age > 120)
            {
                System.out.println("enter numbers between 1 to 120");
                //age = sc.nextInt();
            }

            else
            {
                count ++;
                sum = sum + age;
                maximum = getMax(maximum, age);
                                }
        }while(age != 0);
        average = getAve(sum, count);
        System.out.println("max is" + maximum + "\naverage is" + average);

    }

    public static int getMax (int max, int age)
    {
        if (max < age)
        {
            max = age;
        }
        return max;
    }

    public static double getAve (int sum, int count)
    {
        double average;
        average = (double)sum / (double)count;
        return average;
    }
在您的代码中进行了以下更改

  • 使用do while循环代替while循环
  • 将max作为getMax()的参数传递,但需要将max作为参数传递 争论
  • Double初始化为0

如果您有任何疑问,请在下面进行评论。

请使用此代码,这将生成您所需的输出

public static void main(String[] args) {

        //int max = 0;
        int sum = 0;
        int count = 0;
        int age, maximum=0;
        double average= 0;

        Scanner sc = new Scanner(System.in);
        do {
            System.out.println("enter age");
            age = sc.nextInt();

            if (age <0||age > 120)
            {
                System.out.println("enter numbers between 1 to 120");
                //age = sc.nextInt();
            }

            else
            {
                count ++;
                sum = sum + age;
                maximum = getMax(maximum, age);
                                }
        }while(age != 0);
        average = getAve(sum, count);
        System.out.println("max is" + maximum + "\naverage is" + average);

    }

    public static int getMax (int max, int age)
    {
        if (max < age)
        {
            max = age;
        }
        return max;
    }

    public static double getAve (int sum, int count)
    {
        double average;
        average = (double)sum / (double)count;
        return average;
    }
在您的代码中进行了以下更改

  • 使用do while循环代替while循环
  • 将max作为getMax()的参数传递,但需要将max作为参数传递 争论
  • Double初始化为0
如果您有任何疑问,请在下面进行评论。

您有一个方法

public static double getAve (int sum, int count)
但是你用

average = getAve(count, sum);
所以你们的论点顺序是相反的

第二个问题是在这里使用
max

maximum = getMax(maximum, age);
这里呢

System.out.println(" maximum is " + max
但是您的实际值是最大值,所以也要切换该值。

您有一个方法

public static double getAve (int sum, int count)
但是你用

average = getAve(count, sum);
所以你们的论点顺序是相反的

第二个问题是在这里使用
max

maximum = getMax(maximum, age);
这里呢

System.out.println(" maximum is " + max


但是你的实际值是
最大值
,所以也要切换。

局部变量没有默认值。只需将main中的average设置为0,以可能的重复开始。我已更改了它现在编译的代码,但我遇到了更多问题@AndrewL。局部变量没有默认值。只需将main中的average设置为0,以可能的重复开始重复的我已经更改了它现在编译的代码,但是我有更多的问题@AndrewL.changed code但是我有更多的问题,你能看一下吗?@davechanged code但是我有更多的问题,你能看一下吗?@daveKarthi的答案应该对你有用。我不是想让你打电话到getMax()不在while循环中。它需要在您的循环中才能工作。我仍然认为在print语句之前有getAve()是个好主意,因为它只需要调用一次。看起来,当您给它-10时,它没有接受它,因为它遵循打印“输入1到120之间的数字”的路径“。因此,它没有增加计数或总和。有一件事可以帮助解决问题,那就是每次循环时打印计数和总和,直到它工作为止。Karthi的答案应该对你有用。我不是说让你打电话到getMax()不在while循环中。它需要在您的循环中才能工作。我仍然认为在print语句之前有getAve()是个好主意,因为它只需要调用一次。看起来,当您给它-10时,它没有接受它,因为它遵循打印“输入1到120之间的数字”的路径。因此,它没有增加计数或求和。有一件事可以帮助解决问题,那就是每次循环时打印计数和求和,直到它工作为止。你正在计算每次迭代的平均值,最好在结束时做一次。np,什么是
int max=0;
for?哈哈,它已经在他的代码中了。我只是修改了他的代码。我没有检查谢谢你修改了我的代码,它现在运行得很好,但我不确定do while循环背后的整个过程。我知道它在应用条件之前至少循环了一次,但没有详细说明。如果不是太多,你能用s来解释一下步骤吗这个循环的tep过程?@KarthiHey只需比较两个代码,在代码中你需要定义年龄值两次。一次在while循环上,另一次在while循环内,为了降低这种复杂性,我使用了do-while循环。在我的代码中,年龄值在do-while循环中只定义了一次,它将迭代直到按下0。你正在计算平均每人