首页 > 解决方案 > 为什么我的代码没有正确打印出最高和第一名?

问题描述

主要的:

public class Main {

  private static String [] Countries={"UK", "Italy",
            "Germany", "Thailand","Denmark","Japan","Spain","Argentina"};
  static double average[] = new double[8];
  double[] results = new double[8];

  public static String getWinner(ArrayList<MissUniverse>alist){
    int winner = 0;
    for (int s = 0; s < alist.size(); s++){
        if (alist.get(s).average() > alist.get(0).average() ) {
            winner= s;
        }
    }
    return alist.get(winner).getCountry();
  }

public static String firstRunnerUp(ArrayList<MissUniverse>alist){
    int firstrunnerUp =0;
    for (int s = 0; s < alist.size(); s++){
        if (alist.get(s).average() > alist.get(0).average() && alist.get(s).getCountry() != getWinner(alist) ) {
            firstrunnerUp = s;
        }
    }
    return alist.get(firstrunnerUp).getCountry();

  }

 public static void main (String[] args){
   ArrayList<MissUniverse> alist = new ArrayList<MissUniverse>();
 MissUniverse missUniverse[] = new MissUniverse[Countries.length];

        for(int i=0;i<Countries.length;i++)
        {
            missUniverse[i] = new MissUniverse(Countries[i]);
            missUniverse[i].getScore();
            alist.add(missUniverse[i]);
        }


   System.out.printf("%-15s%-5s%-5s%-5s%-5s%-5s%-5s%-5s%-5s%-10s",
                "Countries","1","2","3","4","5","6","7","8","Average");
    System.out.println();
    for (int i = 0; i < Countries.length; i++){
    System.out.printf("%-13s",Countries[i]);
    missUniverse[i].printInfo();
    System.out.printf("%5.1f", alist.get(i).average() );
    System.out.println();
    }
    System.out.println("The result is");
    System.out.println("Winner: Miss " + getWinner(alist) );
    System.out.println("1st Runner Up: Miss " + firstRunnerUp(alist) );

  }
}

环球小姐:

class MissUniverse { 
  public static int SIZE=8;
  private String country;
  private double[] score;  

  public MissUniverse(String country){
    this.country = country;
    score = new double [SIZE];
  }

  public String getCountry(){
    return country;
  }

  public void getScore(){
      for (int i=0;i<score.length;i++)
        {
            score[i] = Math.random()*10;
        }
  }

  public void setCountry(String newCountry) {
    this.country = newCountry;
  }

 private int highest(){
  int i;
        double highest;
        highest = score[0];

        for (i = 0; i <score.length; i++)
        {
            if (highest < score [i])
            {
                highest = score[i] ;
            }
        }
        return i;
  }

  private int lowest(){      
  int i;
        double lowest;
        lowest = score[0];
        for (i = 0; i <score.length; i++)
        {
            if (lowest > score [i])
            {
                lowest = score[i];
            }
        }
        return i;  
  }

  public double average(){

    double sum = 0.0;
     for (int i = 0; i < score.length; i++){
        sum +=  score[i];
     }
    double average;
    average = (sum - score[lowest()-1] - score[highest()-1] )/ (score.length - 2);
    return average;
  }

  public void printInfo(){

      for(int i=0;i< score.length;i++){  
      System.out.printf("%-5.1f",score[i]);
      }

  }
}

为什么输出错误?

输出 1:

Countries      1    2    3    4    5    6    7    8    Average   
UK           2.0  0.5  3.7  2.0  5.2  7.0  9.2  5.8    4.0
Italy        3.9  3.8  2.4  5.1  5.7  1.0  6.7  6.9    3.6
Germany      7.0  0.5  8.4  2.4  6.3  4.4  8.8  7.1    5.1
Thailand     6.9  8.7  3.9  4.7  4.9  3.5  4.7  9.4    4.7
Denmark      0.5  0.9  3.4  3.3  6.3  10.0 7.0  6.6    4.1
Japan        4.2  2.1  5.9  9.4  9.8  2.3  4.2  9.7    4.7
Spain        6.5  4.0  6.5  3.6  8.5  8.5  9.2  9.4    6.2
Argentina    0.4  6.6  6.5  2.3  2.6  4.5  5.6  3.7    4.1
The result is
Winner: Miss Argentina
1st Runner Up: Miss Spain

它应该是冠军:西班牙小姐,亚军:德国小姐。但是 getWinner(alist) 和 firstrunnerup(alist) 中的逻辑不正确吗?

输出 2:

Countries      1    2    3    4    5    6    7    8    Average   
UK           0.5  9.2  2.8  1.3  7.0  9.6  6.9  6.9    5.1
Italy        4.3  7.6  2.3  3.3  8.6  9.3  7.0  3.1    6.5
Germany      2.2  0.4  6.1  4.4  5.8  3.1  5.5  9.1    3.1
Thailand     1.7  7.1  6.2  9.5  7.9  4.9  0.8  8.3    5.0
Denmark      1.6  1.6  2.5  6.5  8.8  5.8  3.7  1.2    4.9
Japan        7.4  1.5  5.6  1.6  3.1  5.8  3.2  3.4    4.1
Spain        0.2  0.9  0.3  7.2  1.5  7.8  7.3  8.6    2.7
Argentina    9.1  8.9  0.3  5.1  2.6  8.8  4.3  5.1    5.7
The result is
Winner: Miss Argentina
1st Runner Up: Miss Italy

它应该是:获胜者:意大利亚军:阿根廷

有人可以指出我正确的方向吗?我认为错误应该出现在 getwinner 和 firstrunnerup 方法中,但我无法发现错误。

标签: java

解决方案


在 getWinner() 改变

if (alist.get(s).average() > alist.get(0).average() ) {

if (alist.get(s).average() > alist.get(winner).average() ) {

同样在 getFirstRunnerUp() 更改

if (alist.get(s).average() > alist.get(0).average() && alist.get(s).getCountry() != getWinner(alist) ) {

if (alist.get(s).average() > alist.get(firstRunnerUp).average() && alist.get(s).getCountry() != getWinner(alist) ) {

推荐阅读