作为课堂练习,我必须使用以下程序编写代码:
1)计算数组中偶数和奇数的平均值。
我希望使用一种方法来查找偶数和奇数的平均值。但是,我在返回正确的平均值方面遇到了麻烦。例如,如果我只输入奇数,我会收到错误,反之亦然。
此错误: “java.lang.ArithmeticException:/ zero”
另外,如果有可能的话,我希望得到一些帮助来编写剩余的练习,其中包括:
2)打印数组中的最高和最低数字 3)允许用户修改数组的任何数字
到目前为止,我有这段代码:
public static void main (String args[]){
int x[] = new int[4];
Scanner input = new Scanner(System.in);
for(int i = 0; i < x.length ; i++){
System.out.println("Enter a number: ");
x[i] = input.nextInt();
}
System.out.println("Average of even numbers: " + getAverage(x));
System.out.println("Average of odd numbers: " + getAverage(x));
}
public static int getAverage(int a[]){
int add_even = 0;
int counter_even = 0;
int average_even = 0;
int add_odd = 0;
int counter_odd = 0;
int average_odd = 0;
for(int i = 0; i < a.length; i++){
if(a[i] % 2 == 0){
add_even += a[i];
counter_even++;
}
else if(a[i] % 2 == 1) {
add_odd += a[i];
counter_odd++;
}
}
if (add_even % 2 == 1 && add_odd % 2 == 1){
average_even = 0;
average_odd = add_odd / counter_odd;
return average_even;
}
else if (add_even % 2 == 0 && add_odd % 2 == 0){
average_even = add_even / counter_even;
average_odd = 0;
return average_even;
}
else{
average_even = 0;
average_odd = add_odd / counter_odd;
return average_odd;
}
}
谢谢!
答案 0 :(得分:0)
这里有一个除以零的错误。
else if (add_even % 2 == 0 && add_odd % 2 == 0){
average_even = add_even / counter_even;
average_odd = 0;
return average_even;
}
0 % 2 == 0
所以即使add_even为0(因此也是counter_even)你试图用它来划分。您需要通过检查counter_even是否为0来解释代码中的内容。
else if (counter_even != 0 && add_even % 2 == 0 && add_odd % 2 == 0){
答案 1 :(得分:0)
1)使用一种方法得到偶数和奇数的平均值是不合适的,因为你只有return
一个int
。使用两种方法会更简单但是如果你坚持使用一种方法,你可以添加boolean
作为这样的参数来决定做什么。如果没有值,则仅处理ArithmeticException
return
0
。
public static int average(int[] n, boolean even) {
int total = 0;
int count = 0;
for (int i = 0; i < n.length; i++) {
if (even == (n % 2 == 0)) {
total += n;
count ++;
}
}
if (count == 0)
return 0;
return total / count;
2)要检查发现最大值和最小值,只需像这样循环遍历数组
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for (int i = 0; i < x.length; i++) {
if (x[i] < min)
min = x[i];
if (x[i] > max)
max = x[i];
}
3)要允许用户修改数组,您可以打印这些值并提示他们想要更改的值。
System.out.print("Array: ");
for (int i = 0; i < x.length; i++) {
System.out.print(i + ",");
}
System.out.println();
System.out.println("Which value would you like to change?");
int index = input.nextInt();
System.out.println("What do you want the new value to be?");
int value = input.nextInt();
然后,您可以运行一个更改数组值
的方法edit(x, index, value);
public static int edit(int[] n, int index, int value) {
n[index] = value;
return n;
}
答案 2 :(得分:0)
你的平均值看起来比较复杂。
首先关闭getAverage(x)
:
System.out.println("Average of even numbers: " + getAverage(x));
System.out.println("Average of odd numbers: " + getAverage(x));
将返回相同的值,因此如果您想获得赔率或均值的平均值,则该方法应该需要布尔值arg来表示奇数或偶数。
在你的方法中,你应该循环遍历所有数字并检查它是否是偶数。如果它是均匀的并且你是平均值,则将其添加到&#34;总计&#34;并将一个添加到计数器。最后划分&#34;总计&#34;由计数器返回值。平均值很可能包含十进制值,因此您应该返回double或float。
示例:
public static double getAverage(int a[], boolean even){
double total = 0;//These are doubles so dividing later does not require casting to retain a decimal (this can be an int if you only want to return integers)
double counter = 0;
for(int i = 0; i<a.length; i++){
if(a[i] % 2 == 0 && even){//even
counter++;
total += a[i];
}else{//odd
counter++;
total += a[i];
}
}
if(total == 0){//Avoid dividing by 0.
return 0; //You can also throw an exception instead of returning 0.
}
return total / counter; //Returns the average for even or odd numbers.
}
对于问题的第二部分,您需要遍历数字并找到最高和最低的循环。
示例:
int highest = 0;
int lowest = 0;
for(int i = 0; i<x.length; i++){
if(x[i] > highest){
highest = x[i];
}
if(x[i] < lowest){
lowest = x[i];
}
if(i == 0){
highest = x[i];
lowest = x[i];
}
}
答案 3 :(得分:0)
我使用 JS 执行此任务,您只需将我的代码重写为 Java 语言。
如果除以2的结果没有,则数字可被2整除 余数或分数分量 - 换句话说,如果结果为a 整数。零是偶数,因为0除以 结果商得出的结果也是0 - 一个整数(作为a 可以写成没有余数的整数,0分类为 整数)。
function compareEvenOddAverage(arr) {
let even = 0,
odd = 0,
evenCounter = 0,
oddCounter = 0,
str = '';
for (let i = 0; i < arr.length; i++) {
if (arr[i] % 2 === 0) {
even += arr[i];
evenCounter++;
} else {
odd += arr[i];
oddCounter++;
}
}
if (even / evenCounter > odd / oddCounter) {
str += 'Average value of even numbers is greater';
} else if (even / evenCounter < odd / oddCounter) {
str += 'Average value of odd numbers is greater';
} else {
str += 'Average values are equal';
}
return str;
}
console.log(compareEvenOddAverage([0, 1, 2, 3, 4, 5]));
&#13;