【问题标题】:Finding the highest and the lowest value找到最高值和最低值
【发布时间】:2017-09-29 14:39:45
【问题描述】:

我有这个任务要做。它看起来不错,除了 getHighest 输出和 getLowest 结果。这是我的代码:

KNW_CourseGradesV2 类:

public class KNW_CourseGradesV2 implements KNW_Analyzable
{
  //Declare array variable
  private KNW_GradedActivity[] grades = new KNW_GradedActivity[4];
  String results;

  /**
   * Constructor
   * */
  public KNW_CourseGradesV2()
  {

  }

  public void setLab(KNW_GradedActivity lab)
  {
    grades[0] = lab;
  }

  public void setPassFailExam(KNW_GradedActivity pfe)
  {
    grades[1] = pfe;
  }

  public void setEssay(KNW_GradedActivity essay)
  {
    grades[2] = essay;
  }
  public void setFinalExam(KNW_FinalExam fe)
  {
    grades[3] = fe;
  }
  public void setTotalGrade(KNW_GradedActivity tg)
  {
    grades[4] = tg;
  }

  public String toString()
  {
    //Lay out all of the scores
    return "Lab Score: " + grades[0].getScore() +
      "\tGrade: " + grades[0].getGrade() + 
      "\nPass/Fail Exam: " + grades[1].getScore() +
      "\tGrade: " + grades[1].getGrade() +
      "\nEssay Score: " + grades[2].getScore() + 
      "\tGrade: " + grades[2].getGrade() + 
      "\nFinal Exam Score: " + grades[3].getScore() + 
      "\tGrade: " + grades[3].getGrade();
  }

  //Find the average of the grades
  public double getAverage()
  {
    double sum = 0.0;
    double average = 0.0;
    double total = 0.0;

    //For loop to calc. the average
    for(int i =0; i<grades.length; i++)
    {
      total =+ grades[i].getScore();
      average = sum/grades.length;
    }
    return average;
  }

  public KNW_GradedActivity getHighest()
  {
    double highest = grades[0].getScore();

    for(int i = 0; i < grades.length;  i++)
    {
      if(grades[i].getScore() > highest)
      {
        highest = grades[i].getScore();
      }
    }

    //Created KNW_GradedActivity object to bring the highest number
    //into the setScore method so it can be a double
    KNW_GradedActivity gaH =  new KNW_GradedActivity();
    gaH.setScore(highest);
    return gaH;
  }

  public KNW_GradedActivity getLowest()
  {
    double lowest = grades[0].getScore();

    for(int i = 0; i < grades.length; i++)
    {
      if(grades[i].getScore() > lowest)
      {
        lowest = grades[i].getScore();
      }
    }
    //Samething here, just doing it for the lowest number
    KNW_GradedActivity gaL =  new KNW_GradedActivity();
    gaL.setScore(lowest);
    return gaL;
  }
}

KNW_Analyzable 类:

public interface KNW_Analyzable
{
  double getAverage();
  KNW_GradedActivity getHighest();
  KNW_GradedActivity getLowest();
}

KNW_GradedActivity 类:

public class KNW_GradedActivity
{
   private double score;  // Numeric score

   /**
      The setScore method sets the score field.
      @param s The value to store in score.
   */

   public void setScore(double s)
   {
      score = s;
   }

   /**
      The getScore method returns the score.
      @return The value stored in the score field.
   */

   public double getScore()
   {
      return score;
   }

   /**
      The getGrade method returns a letter grade
      determined from the score field.
      @return The letter grade.
   */

   public char getGrade()
   {
      char letterGrade;

      if (score >= 90)
         letterGrade = 'A';
      else if (score >= 80)
         letterGrade = 'B';
      else if (score >= 70)
         letterGrade = 'C';
      else if (score >= 60)
         letterGrade = 'D';
      else
         letterGrade = 'F';

      return letterGrade;
   }
}

这是我得到的输出。我只会显示我面临的问题,不会显示所有输出。

输出:

Average: 0.0
Highest: KNW_GradedActivity@565d3fa7
Lowest: KNW_GradedActivity@655c4395> 

我已经尝试了大约一个星期来弄清楚这一点并找出正在发生的事情,但我似乎找不到它。

【问题讨论】:

  • 胡安·卡洛斯·门多萨,为什么我得到那些荒谬的输出?我的 ode 中的什么产生了该输出?
  • 您正在打印 KNW_GradedActivity 而不是成绩。您应该使用getScore() 来打印该值。
  • 如何在屏幕上打印最高和最低?
  • 顺便说一句:不要使用像 gAH 这样的变量名 - 甚至在本地也不行。这是丑陋和邪恶的。

标签: java class logic


【解决方案1】:

请注意,在您的方法的返回中,您实际上返回了gaHgaL,它们都是KNW_GradedActivity 对象。如果您想查看分数,您应该返回gaH.getScore()gaL.getScore()

【讨论】:

    【解决方案2】:

    为什么不使用StreamDoubleSummaryStatistics 来获取统计信息?让 api 做所有的计算:

    List<KNW_GradedActivity> grades = Arrays.asList(new KNW_GradedActivity(), new KNW_GradedActivity(), new KNW_GradedActivity());
    grades.get(0).setScore(91);
    grades.get(1).setScore(81);
    grades.get(2).setScore(71);
    
    DoubleSummaryStatistics statistics = grades.stream().
            collect(Collectors.summarizingDouble(KNW_GradedActivity::getScore));
    System.out.println(statistics);
    // DoubleSummaryStatistics{count=3, sum=243.000000, min=71.000000, average=81.000000, max=91.000000}
    

    【讨论】:

      【解决方案3】:

      另一种选择是覆盖 KNW_GradedActivity 类中的 toString 方法:

      @Override
      public String toString() {
          return "{" +
                  "score=" + score +
                  ", grade='" + getGrade() + '\'' +
                  '}';
      }
      

      这样你就不必改变你的实际打印语句,并且将有一个很好的输出结合你的分数和等级。它看起来像:

      {score=90.0,grade='A'}

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-29
      • 2012-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      相关资源
      最近更新 更多