我的代码无法计算最小和最大数字

时间:2020-02-17 15:57:48

标签: java

我正在尝试编写代码,以显示最高,最低,它们之间的差以及输入的30个数字的平均值。 但是它不起作用,并且对于最小和最大数字都显示相同的结果。这是代码。

foreach( $responseArray['data'] as $data )  {
  foreach( $data as $key => $value )  {
    echo "$key: $value<br>";
  }
}

2 个答案:

答案 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)

有关此解决方案的一些注意事项:

  1. 通过声明累积总数double,不需要强制转换。 因为Java知道,如果您将一个int分配给一个声明的 double,则您想将int自动转换为double 。类似地,当您将一个double除以一个int时(例如,取平均值时),就会隐含要表达为double的结果。那也避免了强制转换。如果您有两个int并且想要产生一个double,则需要转换一个或多个int,或者在诸如print语句的情况下,编译器无法推断出该参数的最佳类型,则需要显式转换为将int值转换为双精度值。

  2. 不确定在哪个操作系统上运行此程序。理想的情况是使其在所有平台上都可以运行,而无需人们输入魔术字来结束输入(因为它的俗气性)。结束输入的最简单方法是使用特定于操作系统的输入结束(文件末尾)组合键,对于Linux,它是CTRL / D,这就是我在提示中说明的方式。在另一个输入顺序不同的操作系统上,您只需更改提示即可。最棘手的是应该被认为是真正可移植的Java。在那种情况下,我将亲自调查如何确定当前操作系统上的操作系统和/或文件结束符或按键组合,并修改提示以指示以任何结束输入。这将是一项高级任务,但效果非常好。

  3. 示例说明了如何使用命名常量来确定数组,并用于限制输入量(并且可以用于限制访问数组的for循环的循环计数)。

  4. 通过分别将最小值和最大值设置为非常高和很低的值(请注意分配给最大值的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);
    }
}