java - 读取整数值并打印介于 0 和输入值之间的所有奇数的平均值的 Java 程序,包括输入值
问题描述
这是整个问题:
“编写一个程序,读取一个整数值并打印 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);
}
}
解决方案
一个简单的方法可能是从零迭代到目标数字并检查每个数字是奇数还是偶数:
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
在整个示例中都使用了 s 。在一般用例中,您可能应该使用double
s 来避免使用整数除法的错误。
推荐阅读
- teradata - Terdata 使用井号作为字段名称
- reactjs - 表达式大小超过 Google AMP 状态中的最大值
- java - 使用轻量级流 API 流获取元素匹配的索引
- azure - 在 azure 自动化中运行 powershell 代码时失败
- apache-kafka - Kafka 主题分区在磁盘上均匀分布
- typescript - 有人可以帮我描述一下这个打字稿吗?
- orocrm - 如何将自定义图标添加到 Oro 前台菜单项?
- azure-active-directory - Azure AD:EnforceCloudPasswordPolicyForPasswordSyncedUsers 不适用于现有租户
- python - 使用 Sickle 从机构 OAI-PMH 存储库中检索所有记录的问题
- python - 如何按索引二进制值中 1 的数量顺序遍历列表?(最好是 Python)