2015-02-08 31 views
-4

这里是问题:数组排序 - 爪哇日食

国际奥委会已经要求你写一个程序来处理数据,并确定了对奖牌获得者花样滑冰。您将得到以下文件: Pairs.txt

其中包含每对滑板的数据。数据包括每位选手的姓名,国家和八位评委在技术方面和成绩方面的得分。一种典型的记录将是如下:

史密斯 琼斯 澳大利亚 5.0 4.9 5.1 5.2 5.0 5.1 5.2 4.8 4.3 4.7 4.8 4.9 4.6 4.8 4.9 4.5

每个溜冰者的最后得分是的总和这两类分数的平均值。

设计一个类来保存上述数据和最终得分。从文件中读取数据并计算每对的最终分数。对对象数组进行排序,并依次在屏幕上显示结果,为奖牌获得者提供特别突出的参考。

这是我的课

public class Skaters { 

    private String name1; 
    private String name2; 
    private String country; 
    private double[] arrTech = new double[8]; 
    private double[] arrArt = new double[8]; 
    private double score; 

    public Skaters(String n1, String n2, String c1, double[] arrT, double[] arrA) 

    { 
     this.name1 = n1; 
     this.name2 = n2; 
     this.country = c1; 
     this.arrTech = arrT; 
     this.arrArt = arrA; 

    } 

    public void setName1(String n1) 

    { 
     name1 = n1; 
    } 

    public void setName2(String n2) 

    { 
     name2 = n2; 
    } 

    public void setCountry(String c1) 

    { 
     country = c1; 
    } 

    public void setArrTech(double[] arrT) 

    { 
     arrTech = arrT; 
    } 

    public void setArrArt(double[] arrA) 

    { 
     arrArt = arrA; 
    } 

    public String getName1() 

    { 
     return name1; 
    } 

    public String getName2() 

    { 
     return name2; 
    } 

    public String getCountry() 

    { 
     return country; 
    } 

    public double[] getArrTech() { 
     return arrTech; 
    } 

    public double[] getArrArt() { 
     return arrArt; 
    } 

    public double getScore() 

    { 
     double sum = 0, avg1, avg2; 

     for (int r = 0; r < arrTech.length; r++) 

      sum += arrTech[r]; 

     avg1 = sum/arrTech.length; 

     sum = 0; 

     for (int s = 0; s < arrArt.length; s++) 

      sum += arrArt[s]; 

     avg2 = sum/arrArt.length; 

     return (avg1 + avg2); 
    } 

} 

这是我的主要

import java.io.*; 
import java.util.Scanner; 

public class testSkaters { 

    private static final int NUMBER_OF_JUDGES = 8; 

    public static void main(String[] args) throws IOException { 

     Skaters[] arrSkaters = new Skaters[50]; 

     File myFile = new File("Pairs.txt"); 

     Scanner input = new Scanner(myFile); 

     int countSkaters = 0; 
     String name1; 
     String name2; 
     String country; 
     double[] arr1 = null; 
     double[] arr2 = null; 

     while (input.hasNext()) 

     { 

      name1 = input.nextLine(); 
      name2 = input.nextLine(); 
      country = input.nextLine(); 

      arr1 = new double[8]; 
      for (int i = 0; i < NUMBER_OF_JUDGES; i++) 

       arr1[i] = input.nextDouble(); 

      arr2 = new double[8]; 
      for (int j = 0; j < NUMBER_OF_JUDGES; j++) 

       arr2[j] = input.nextDouble(); 

      Skaters s1 = new Skaters(name1, name2, country, arr1, arr2); 

      arrSkaters[countSkaters] = s1; 

      countSkaters++; 

      input.nextLine(); 

     } 

     sortSkaters(arrSkaters, 10); 

     for (int t = 0; t < countSkaters; t++) 

     { 
      System.out.println("Name 1: " + arrSkaters[t].getName1()); 

      System.out.println("Name 2: " + arrSkaters[t].getName2()); 

      System.out.println("Country: " + arrSkaters[t].getCountry()); 

      printArray(arrSkaters[t].getArrTech()); 

      printArray1(arrSkaters[t].getArrArt()); 

      System.out.println("Score: " + arrSkaters[t].getScore() + "\n"); 

     } 

    } 

    public static void printArray(double[] arr3) { 
     for (int r = 0; r < arr3.length; r++) 

      System.out.print(arr3[r] + " "); 
     System.out.println(); 

    } 

    public static void printArray1(double[] arr4) { 
     for (int s = 0; s < arr4.length; s++) 

      System.out.print(arr4[s] + " "); 
     System.out.println(); 
    } 

    private static void sortSkaters(Skaters[] arr, double count) { 

     for (int i = 0; i < count; i++) { 
      int high = i; 

      for (int k = i + 1; k < count; k++) { 
       if (arr[k].getScore() > arr[high].getScore()) 

        high = k; 

       if (i != high) { 
        Skaters temp = arr[i]; 
        arr[i] = arr[high]; 
        arr[high] = temp; 
       } 

      } 

     } 
    } 
} 

这里是文本文件

smith 
jones 
australia 
4.2 5.1 3.8 2.9 5.0 4.6 4.9 4.3 
4.9 4.8 5.8 3.8 4.9 4.6 5.0 4.5 
lennon 
murray 
england 
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 
gusto 
petitot 
italia 
4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 
5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 
lahaie 
petit 
france 
1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 
5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 
bilodeau 
bernard 
canada 
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 
4.1 4.2 4.3 4.8 4.9 4.6 4.0 4.5 
lahore 
pedro 
mexico 
3.2 3.1 3.8 3.9 3.0 3.6 3.9 3.3 
5.9 5.8 5.8 5.8 5.9 5.6 5.0 5.5 
maliak 
kolikov 
russia 
4.2 4.1 4.8 4.9 4.0 4.6 4.9 4.3 
1.9 1.8 1.8 1.8 1.9 1.6 1.0 1.5 
ching 
chong 
china 
5.2 5.1 5.8 5.9 5.0 5.6 5.9 5.3 
2.9 2.8 2.8 2.8 2.9 2.6 2.0 2.5 
gates 
brown 
U.S 
1.2 1.1 1.8 1.9 1.0 1.6 1.9 1.3 
3.9 3.8 3.8 3.8 3.9 3.6 3.0 3.5 
joe 
charlie 
switzerland 
2.2 2.1 2.8 2.9 2.0 2.6 2.9 2.3 
4.9 4.8 4.8 4.8 4.9 4.6 4.0 4.5 

我做了我的排序,但我的输出是错误的。最高分应该是第一名(这是赢家等)。我的代码不这样做,任何人都可以帮我请

+0

Eclipse是一个IDE。如果你在java中对数组进行排序的方式与其他工具不同,那将会是个大问题。 – ChiefTwoPencils 2015-02-08 22:07:31

+0

您是否知道有构建数组的方法?你不必自己做。 – csmckelvey 2015-02-08 22:10:32

+0

@Takendarkk看起来像练习如何创建排序算法的功课。 – 2015-02-08 22:11:04

回答

0

这个问题似乎是在这里:

private static void sortSkaters(Skaters[] arr, double count) { 
    for (int i = 0; i < count; i++) { 
     int high = i; 
     for (int k = i + 1; k < count; k++) { 
      if (arr[k].getScore() > arr[high].getScore()) 
       high = k; 
      //HERE 
      if (i != high) { 
       Skaters temp = arr[i]; 
       arr[i] = arr[high]; 
       arr[high] = temp; 
      } 
     } 
    } 
} 

if (i != high) {声明在内for内的每个循环,当它应该在的唯一执行的处理外部for每个循环。只需将其移动到外部:

private static void sortSkaters(Skaters[] arr, double count) { 
    for (int i = 0; i < count; i++) { 
     int high = i; 
     for (int k = i + 1; k < count; k++) { 
      if (arr[k].getScore() > arr[high].getScore()) { 
       high = k; 
      } 
     } 
     //HERE 
     if (i != high) { 
      Skaters temp = arr[i]; 
      arr[i] = arr[high]; 
      arr[high] = temp; 
     } 
    } 
} 
+0

非常感谢你,它的工作 – 2015-02-22 15:03:05