【问题标题】:Displaying the average next to the array在数组旁边显示平均值
【发布时间】:2020-02-20 23:56:04
【问题描述】:

我是 Java 新手,非常抱歉。

我有两个数组:

int[] grades = {64,55,45,67,65,88};
String[] unitCode = {"APP:","BSAD:","CF","DAD:","N&CS:","POP:"};

而且我需要把每一个放在一起形成:

[APP:64, BSAD:55, CF45, DAD:67, N&CS:65, POP:88]

我已经设法用这段代码实现了这一点:

    public String[] unitMarks(int[] grades, String[] unitCode) 
    {
        double sum = 0;
        for (double i : grades)
        sum += i;
        double average = (sum/grades.length);

            for (int i = 0; i <grades.length; i++)
            {
                String combination = unitCode[i]+grades[i];
                unitCode[i] = combination;

        }

            return unitCode;
    }

但我还需要在它的末尾显示平均成绩,所以它应该说:

[APP:64, BSAD:55, CF:45, DAD:67, N&CS:65, POP:88, Average:64.0]

我已经编写了用于查找成绩数组平均值的代码。我只是无法使用组合数组返回平均值(并且还在它之前显示“平均值:”)。

我尝试过做类似的事情 -

String includedAverage = unitCode+" Average:"+average;
return includedAverage;

但是它开始说它不能从 String 转换为 String[]。 如果我将方法返回类型更改为 String 它不适用于此:

System.out.println(Arrays.toString(myArrays.unitMarks(grades, unitCode)));

任何帮助或指示都会很棒。谢谢。

【问题讨论】:

    标签: java arrays string return average


    【解决方案1】:

    如果你只需要显示值,你可以使用 Stream 计算平均值并一次性显示:

    private void displayGradesAndAverage(int[] grades, String[] unitCode) {
        IntStream.range(0, grades.length)
                .peek(i -> System.out.print(unitCode[i] + grades[i] + ", "))
                .map(i -> grades[i])
                .average()
                .ifPresent(avg -> System.out.println("Average:" + avg));
    }
    

    【讨论】:

      【解决方案2】:

      有两种方法。 1.使用ArrayList,当你添加元素时它的大小会增长

      public List<String> unitMarks(int[] grades, String[] unitCode) 
      {
          List<String> unitCodeArrayList = new ArrayList<String>();
          double sum = 0;
          for (double i : grades)
          sum += i;
          double average = (sum/grades.length);
      
              for (int i = 0; i <grades.length; i++)
              {
                  String combination = unitCode[i]+grades[i];
                  unitCodeArrayList.add(combination);
      
               }
              unitCodeArrayList.add("Average:"+average);
              return unitCodeArrayList;
      }
      
      1. 使用原始数组但以这种方式附加到它(因为我不确定它的大小)

        public String[] unitMarks(int[] grades, String[] unitCode) 
        {
        double sum = 0;
        for (double i : grades)
        sum += i;
        double average = (sum/grades.length);
        for (int i = 0; i <grades.length; i++)
        {
                String combination = unitCode[i]+grades[i];
                unitCode[i] = combination;
        }
            String[] resUnitCode = appendArray(unitCode, "Average:"+average);
            return resUnitCode;
        }
        private String[] appendArray(String[] array, String x){
        String[] result = new String[array.length + 1];
        for(int i = 0; i < array.length; i++)
            result[i] = array[i];
        result[result.length - 1] = x;
        return result;
        }
        

      【讨论】:

        【解决方案3】:

        您可以添加一个比 unitcode 数组多一个空间的结果数组,并将值分配给它,而不是修改输入:

        public String[] unitMarks(int[] grades, String[] unitCode) {
            double sum = 0;
            for (double i : grades) {
                sum += i;
            }
            double average = (sum / grades.length);
            String[] result = new String[grades.length +1];
            for (int i = 0; i < grades.length; i++) {
                String combination = unitCode[i] + grades[i];
                result[i] = combination;
            }
            result[result.length-1]= "Average:"+average;
            return result;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-24
          • 1970-01-01
          • 2015-09-17
          • 1970-01-01
          • 2015-12-03
          • 2011-11-11
          • 2017-04-12
          • 2016-11-25
          相关资源
          最近更新 更多