2015-04-22 2 views
4

Первое сообщение! У меня есть задание, которое требует от меня написать java-программу, которая читает данные из текстового файла и сортирует его в соответствии с оценкой и их инициалами. Текстовый файл следующим образом:Почему мой тип пузыря не работает? Java

John Doe 75 
Joe Blow 65 
Mary Smith 80 
John Green 82 
Jill White 97 

Вот мой код:

import java.util.Scanner; 
public class HelloWorld{ 
public static void main(String[] args) throws Exception{ 
    String[] firstName = new String[5]; 
    String[] lastName = new String[5]; 
    int score[] = new int[5]; 
    java.io.File file = new java.io.File("data.txt"); 
    Scanner input = new Scanner(file); 

     int c=0; 
     while(input.hasNext()){ 
      firstName[c] = input.next(); 
      lastName[c] = input.next(); 
      score[c] = input.nextInt(); 
      c++; 
     } 
     input.close(); 

    MichaelBubbleSort(score); 
    for(int x=4;x>=0;x--){ 
     System.out.print(firstName[x].substring(0,1) + lastName[x].substring(0,1) + " " + score[x]); 
     System.out.println(); 
    } 
} 


public static void MichaelBubbleSort(int[] arr){ 
    int temp; 
    for(int i=0; i < arr.length-1; i++){ 

     for(int j=1; j < arr.length-i; j++){ 
      if(arr[j-1] > arr[j]){ 
       temp=arr[j-1]; 
       arr[j-1] = arr[j]; 
       arr[j] = temp; 
     } 
    } 
    } 
} 

}

Но по какой-то причине он всегда выходит как:

JW 97                                        
JG 82                                        
MS 80                                        
JB 75                                        
JD 65 

выход должен быть:

JW 97 
JG 82 
MS 80 
JD 75 
JB 65 

Любые причины, по которым это происходит?

+0

вы отсортированный счет, но не упорядоченные имени соответственно. Вот почему вы столкнулись с этой проблемой. – Zealous

+0

Какой выход вы ожидаете? (пожалуйста, отредактируйте вопрос) – xerx593

ответ

2

Это решение согласно вашему коду. но код должен быть лучше этого. вы должны использовать классы коллекции. В этом коде вам необходимо соответственно заменить имена.

import java.util.Scanner; 

public class HelloWorld{ 
    public static void main(String[] args) throws Exception { 
     String[] firstName = new String[5]; 
     String[] lastName = new String[5]; 
     int score[] = new int[5]; 
     java.io.File file = new java.io.File("D:\\test.txt"); 
     Scanner input = new Scanner(file); 

     int c = 0; 
     while (input.hasNext()) { 
      firstName[c] = input.next(); 
      lastName[c] = input.next(); 
      score[c] = input.nextInt(); 
      c++; 
     } 
     input.close(); 

     MichaelBubbleSort(score,firstName,lastName); 
     for (int x = 4; x >= 0; x--) { 
      System.out.print(firstName[x].substring(0, 1) 
        + lastName[x].substring(0, 1) + " " + score[x]); 
      System.out.println(); 
     } 
    } 

    public static void MichaelBubbleSort(int[] arr,String[] firstName, String[] lastName) { 
     int temp; 
     String tempFirstName,tempLastName; 
     for (int i = 0; i < arr.length - 1; i++) { 

      for (int j = 1; j < arr.length - i; j++) { 
       if (arr[j - 1] > arr[j]) { 
        temp = arr[j - 1]; 
        arr[j - 1] = arr[j]; 
        arr[j] = temp; 

        tempFirstName = firstName[j -1]; 
        firstName[j - 1] = firstName[j]; 
        firstName[j] = tempFirstName; 

        tempLastName = lastName[j -1]; 
        lastName[j - 1] = lastName[j]; 
        lastName[j] = tempLastName; 
       } 
      } 
     } 
    } 
} 
+0

Большое вам спасибо! Я думал, что этот вид позаботился бы о первом и последнем имени. И нам не разрешено использовать коллекции, потому что они не находятся в тех главах, которые мы сейчас находим. Спасибо за подсказку. :-) – Joe

2

Это происходит потому, что вы не сортируете имена в соответствии со счетом. Я бы рекомендовал использовать массив объектов для хранения данных, а затем сортировать массив объектов с пузырьковой сортировкой, как это: класс

public class B{ 

public static void MichaelBubbleSort(Person[] arr){ 
    Person temp; 
    for(int i=0; i < arr.length-1; i++){ 

     for(int j=1; j < arr.length-i; j++){ 
      if(arr[j-1].score > arr[j].score){ 
       temp=arr[j-1]; 
       arr[j-1] = arr[j]; 
       arr[j] = temp; 
      } 
     } 
    } 
} 

public static void main(String x[]){ 
    Person [] a={new Person("John","Doe",75),new Person("Joe","Blow",65),new Person("Mary","Smith",80),new Person("John","Green", 82),new Person("Jill","White", 97)}; 
    MichaelBubbleSort(a); 

    for(Person i:a){ 
     System.out.println(i.FirstName+" "+i.LastName+" "+i.score); 
    } 

} 
} 

объекта для хранения данных

class Person{ 
    int score; 
    String FirstName; 
    String LastName; 

    Person(String FName,String LName,int Score){ 
     this.score=Score; 
     this.FirstName=FName; 
     this.LastName=LName; 
    } 
} 
Смежные вопросы