我正在尝试编写代码,以显示最高,最低,它们之间的差以及输入的30个数字的平均值。 但是它不起作用,并且对于最小和最大数字都显示相同的结果。这是代码。
foreach( $responseArray['data'] as $data ) {
foreach( $data as $key => $value ) {
echo "$key: $value<br>";
}
}
答案 0 :(得分:2)
在第一个循环(输入循环)之后,i
的值为daystemp.length
(即30)。
它永远不会重置为0。因此,每个while循环条件均为false。
在循环之前添加i=0
,然后在i++
块之外执行if
,否则您的代码将永远不会结束。
示例:
i=0;
int maxTemp = daystemp[0];
while (i < daystemp.length) {
if (daystemp[i] > maxTemp) {
maxTemp = daystemp[i];
dayHot = i + 1;
}
i++;
}
答案 1 :(得分:1)
有关此解决方案的一些注意事项:
通过声明累积总数double
,不需要强制转换。
因为Java知道,如果您将一个int分配给一个声明的 double,则您想将int自动转换为double 。类似地,当您将一个double除以一个int时(例如,取平均值时),就会隐含要表达为double的结果。那也避免了强制转换。如果您有两个int并且想要产生一个double,则需要转换一个或多个int,或者在诸如print语句的情况下,编译器无法推断出该参数的最佳类型,则需要显式转换为将int值转换为双精度值。
不确定在哪个操作系统上运行此程序。理想的情况是使其在所有平台上都可以运行,而无需人们输入魔术字来结束输入(因为它的俗气性)。结束输入的最简单方法是使用特定于操作系统的输入结束(文件末尾)组合键,对于Linux,它是CTRL / D,这就是我在提示中说明的方式。在另一个输入顺序不同的操作系统上,您只需更改提示即可。最棘手的是应该被认为是真正可移植的Java。在那种情况下,我将亲自调查如何确定当前操作系统上的操作系统和/或文件结束符或按键组合,并修改提示以指示以任何结束输入。这将是一项高级任务,但效果非常好。
示例说明了如何使用命名常量来确定数组,并用于限制输入量(并且可以用于限制访问数组的for循环的循环计数)。
通过分别将最小值和最大值设置为非常高和很低的值(请注意分配给最大值的LOW值和分配给最小值的HIGH值,确保输入的第一个合法温度将设置最小值和最大值,并且事物将从那里去。)
import java.util.Scanner;
public class TemperatureStats {
final static int MAX_DAYS = 31;
public static void main(String[] args) {
int[] dayTemps = new int[MAX_DAYS];
double cumulativeTemp = 0.0;
int minTemp = 1000, maxTemp = -1000;
Scanner input = new Scanner(System.in);
System.out.println("Enter temps for up to 1 month of days (end with CTRL/D):");
int entryCount = 0;
while (input.hasNextInt() && entryCount < MAX_DAYS)
dayTemps[entryCount++] = input.nextInt();
/* Find min, max, cumulative total */
for (int i = 0; i < entryCount; i++) {
int temp = dayTemps[i];
if (temp < minTemp)
minTemp = temp;
if (temp > maxTemp)
maxTemp = temp;
cumulativeTemp += temp;
}
System.out.println("High temp. = " + maxTemp);
System.out.println("Low temp. = " + minTemp);
System.out.println("Difference = " + (maxTemp - minTemp));
System.out.println("Avg temp. = " + cumulativeTemp / entryCount);
}
}