【问题标题】:JAVA - How to store max and minimum values in an array that's inside a loop?JAVA - 如何将最大值和最小值存储在循环内的数组中?
【发布时间】:2013-11-21 13:29:37
【问题描述】:

我需要将最小值和最大值存储在给定的数组中,然后用特定字符将它们打印出来(+ 表示最大值,“-”表示最小值,“*”表示所有其他字符)。

我想我已经完成了大部分工作,除了适当地存储值,因此所有值都不是“++++++++++....”,就像它们当前打印出来的那样。

有什么想法吗?非常感谢您的帮助。

      public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        int numbers[] = new int[24];
        int min = Integer.MAX_VALUE;
        int max=Integer.MIN_VALUE;
        int maxhour = 0; 
        int minhour = 0;
        int total = 0;
        char MAX = '+', MIN = '-', MIDDLE = '*';
        char currentchar = 0;
        for(int i=0; i< numbers.length; i++){
            numbers[i] = keyboard.nextInt();
            total = total + numbers[i];
           if(numbers[i]<min){
               min = numbers[i];
               minhour = i;
               currentchar = MIN;
           }else if (numbers[i]>max){
               max = numbers[i];
               maxhour = i;
               currentchar = MAX;
           }
        }
        for(int i=0; i< numbers.length; i++){
            System.out.print("Hour " + i + ":");
            printTimes(currentchar, numbers[i]);
            System.out.println("");
          }

        System.out.println("Largest Number of hits is : " + max + " at hour " + maxhour);
        System.out.println("Average Number of hits is : " + (total/24) + " per hour");
        System.out.println("Smallest Number of hits is : " + min + " at hour " + minhour);



    }

        public static void printTimes(char c, int times) {
        if (times >= 70) {
            for(int i=0; i< 69; i++){
            System.out.print(c);
            } System.out.print(">");
        } else if (times < 70) {
            for(int i=0; i< times; i++)
            System.out.print(c);
        }
    }


}

电流输出示例:

42 29 36 7 5 3 10 13 33 40 51 49 22 58 63 102 65 58 48 24 36 48 52 42

0时:++++++++++++++++++++++++++++++++++++++++++

第 1 小时:++++++++++++++++++++++++++++++

第 2 小时:++++++++++++++++++++++++++++++++++++++

第 3 小时:+++++++

第 4 小时:+++++

第 5 小时:+++

6 小时:++++++++++

7 小时:++++++++++++++

8小时:+++++++++++++++++++++++++++++++++++

9小时:++++++++++++++++++++++++++++++++++++++++++

....

最大点击数为:15 小时 102 次​​p>

平均点击次数为:每小时 39 次

最少的点击数是:5 小时 3 次

【问题讨论】:

    标签: java arrays max min


    【解决方案1】:

    只需更改您的最后一个for

    for (int i = 0; i < numbers.length; i++) {
        System.out.print("Hour " + i + ":");
        if (numbers[i] == min)
            currentchar = MIN;
        else if (numbers[i] == max)
            currentchar = MAX;
        else
            currentchar = MIDDLE;
        printTimes(currentchar, numbers[i]);
        System.out.println("");
    }
    

    【讨论】:

    • 太棒了!那成功了!你能解释一下这与我的原始代码有什么不同吗?
    • 只需检查数组numbers 的每个元素与您刚刚计算的minmax 值。如果不是minmaxelse 子句),它将把currentchar 设置为MIDDLE
    • 这很有帮助。感谢您的帮助!
    • @user2994377 除了 Christian 的回答之外,您的代码中还有另一个更微妙的错误。在您的第一个循环中,当您计算最小值/最大值时,您应该将 min max 都初始化为数组的第一个值。就目前而言,如果你输入的第一个值也是最大值,结果会不正确:它会小于 Integer.MAX_VALUE,所以它会暂时设置为 min 的第一个值,但永远不会设置为最大值(通过你头脑中的逻辑工作,你会看到)。另一种解决方法是去掉这两个 if 之间的“else”。
    【解决方案2】:

    我会按如下方式更新您的代码 -

    public static void main(String[] args) {
      int numbers[] = new int[24];
      int total = 0;
    
      System.out.println("Enter 24 integers please");
      Scanner keyboard = null;
      try {
        keyboard = new Scanner(System.in);
        for (int i = 0; i < numbers.length; i++) {
          numbers[i] = keyboard.nextInt();
          total += numbers[i];
        }
      } finally {
        keyboard.close();
      }
      Integer min = null;
      Integer max = null;
      int maxhour = 0;
      int minhour = 0;
      char MAX = '+', MIN = '-', MIDDLE = '*';
      for (int i = 0; i < numbers.length; i++) {
        if (min == null || numbers[i] < min) {
          min = numbers[i];
          minhour = i;
        } else if (max == null || numbers[i] > max) {
          max = numbers[i];
          maxhour = i;
        }
      }
      for (int i = 0; i < numbers.length; i++) {
        char currentchar = MIDDLE;
        if (i == minhour) {
          currentchar = MIN;
        } else if (i == maxhour) {
          currentchar = MAX;
        }
        System.out.print("Hour " + i + ":");
        printTimes(currentchar, numbers[i]);
        System.out.println("");
      }
    
      System.out.println("Largest Number of hits is : "
        + max + " at hour " + maxhour);
      System.out.println("Average Number of hits is : "
        + (total / 24) + " per hour");
      System.out.println("Smallest Number of hits is : "
        + min + " at hour " + minhour);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-05-26
      • 2013-09-02
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 2021-02-10
      • 2021-06-17
      • 2019-09-18
      • 2012-11-21
      相关资源
      最近更新 更多