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。你正在计算平均每人