这是整个问题:
“编写一个程序,该程序读取一个整数值,并打印出介于0和输入值之间(包括两端)的所有奇数整数的平均值。如果输入值小于0,则显示错误消息。相应地,提示。”
我似乎无法弄清楚如何在for循环中进行数学运算。我在设置它时遇到麻烦,因此循环的几率增加了。我已经尝试了一百万种不同的方法,但没有任何效果。
public static void main(String[] args) {
int value;
int oddAvg = 0;
int count = 0;
Scanner scan = new Scanner(System.in);
System.out.print("Enter an integer: ");
value = scan.nextInt();
while (value < 0){
System.out.println("Error: Input should not be less than 0");
System.out.print("Enter an integer greater than 0: ");
value = scan.nextInt();
}
for(){
}
System.out.println("The average of odd integers between 0 and " + value + " is " + oddAvg);
}
}
答案 0 :(得分:3)
一个简单的方法可能是从零迭代到目标数字,并检查每个数字是奇数还是偶数:
int sum = 0;
int count = 0;
for (int i = 0; i <= value; i++) {
if (i % 2 != 0) {
sum += i;
count++;
}
}
int avg = sum / count;
但是,这当然是无效的。更好的方法是从第一个奇数1
开始,并在每次迭代中将其递增2
,因此您将仅对奇数进行迭代:
double sum = 0;
int count = 0;
for (int i = 1; i <= value; i += 2) {
sum += i;
count++;
}
int avg = sum / count;
或者,如果您真的想在数学上听起来不错,则可以利用以下事实:给定范围内的奇数自然数是均匀分布的。由于这种分布是对称的,因此平均值等于平均值,并且您根本不需要循环:
int start = 1;
int end = value;
if (value % 2 == 0) {
value--;
}
int avg = (end + start) / 2;
一般评论:
在此特定情况下,平均值为int
,因此在整个示例中我都使用了int
。在一般情况下,您可能应该使用double
来避免使用整数除法的错误。
答案 1 :(得分:1)
这是解决您问题的方法!
public static void main(String[] args) {
int input = 25; //this is whatever value you're going up to.
int accumulator = 0; //keep track of the total sum
for (int i = 0; i < input; i++) {
if (i % 2 == 1) { //if odd
accumulator+=i; // add to the running total sum
}
}
System.out.println(accumulator/(input/2)); //print out the total/num of numbers
}
答案 2 :(得分:0)
如果对Java 8感兴趣,可以尝试一下。这是幼稚的方法实现。
int val = 0;
final OptionalDouble average = IntStream.rangeClosed(0, val)
.filter(n -> n % 2 != 0)
.average();
System.out.println(average);