как пузырьковую сортировку через текстовый файл в Java - PullRequest
0 голосов
/ 07 октября 2010

Как правильно выполнить пузырьковую сортировку в текстовом файле, присваивая значения массиву. В приведенном ниже коде я попытался присвоить значения из текстового файла строке, пока еще есть что-то, что можно получить. Затем я использовал цикл for, чтобы назначить тот, который у меня есть, для массива. Затем попытался использовать пузырьковую сортировку, чтобы, надеюсь, отсортировать числа, которые я выбрал, по возрастанию по убыванию. Но я получаю это в качестве вывода:

5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  
10  10  10  10  10  10  10  10  10  10  10  10  10  10  10  10  10  10  10  10  
4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  
20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  20  
100  100  100  100  100  100  100  100  100  100  100  100  100  100  100  100  100  100  100  100  
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  
0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  
78  78  78  78  78  78  78  78  78  78  78  78  78  78  78  78  78  78  78  78  
12  12  12  12  12  12  12  12  12  12  12  12  12  12  12  12  12  12  12  12  
29  29  29  29  29  29  29  29  29  29  29  29  29  29  29  29  29  29  29  29  

Вот мой код:

     try{
 int i;
 String ss;
   FileReader fr;
      fr = new FileReader (new File("X:\\file.txt"));
      BufferedReader br = new BufferedReader (fr);


while ((ss = br.readLine()) != null) {
    String[] sv = ss.split(" ");


        String splayer_name=sv[1];
        String s_player_score=sv[2];

 for(int xy=0;xy<player_name.length;xy++){
        player_name[xy]=splayer_name;
        player_score[xy]=Integer.parseInt(s_player_score);
}


bubble_srt(player_score, player_score.length);

    for(i = 0; i <player_score.length; i++)
      System.out.print(player_score[i]+"  ");
    System.out.println();




  }

  }catch(Exception e){}

Пожалуйста, помогите,

Обновление: кто-то спросил о структуре файла, вы ссылаетесь на это: Это файл file.txt, который я выбираю, это самый правый номер:

1 a 5
2 b 10
5 x 4
7 h 20

Ответы [ 2 ]

2 голосов
/ 07 октября 2010

Я думаю, что ваша главная проблема с циклом:

 for(int xy=0;xy<player_name.length;xy++){
        player_name[xy]=splayer_name;
        player_score[xy]=Integer.parseInt(s_player_score);
}

Каждый раз, когда вы читаете в строке.Вы заменяете все содержимое массива * player_name * на splayer_name, а все содержимое * player_score * на значение int s_player_score.

Я предполагаю, что вы пытаетесь это сделатьдобавить одну новую запись в player_name и player-Score.Размер двух массивов должен быть равен количеству строк в текстовом файле, поэтому вы можете использовать некоторую форму списка, а не массива.

Для обоих массивов хранения (или списков)добавьте имя один раз и один раз, и я думаю, что это поможет вам лучше понять, что вы пытаетесь сделать.

1 голос
/ 07 октября 2010
  1. Переместите цикл for и вызов bubble_srt() вне цикла while.Вы заменяете все содержимое на каждой итерации, как правильно указано в предыдущем ответе.Вам нужно только отсортировать ПОСЛЕ того, как все содержимое файла будет прочитано.
  2. Поскольку ваш файл может иметь любой размер, невозможно заранее инициализировать массив, если вы не хотите выполнить два чтения по одному, чтобы получитьсчитать, а затем читать в массив.Вам было бы лучше использовать список.Вот код скелета:

    try {
        int i;
        String ss;
        FileReader fr;
        fr = new FileReader(new File("file.txt"));
        BufferedReader br = new BufferedReader(fr);
        int xy=0;
        List<String> player_name = new ArrayList<String>();
        List<Integer> player_score = new ArrayList<Integer>();
    
    
    <pre><code>while ((ss = br.readLine()) != null) {
        String[] sv = ss.split(" ");
    
    
            player_name.add(sv[1]);
            player_score.add(Integer.parseInt(sv[2]));
    
    
    }
    
    
    bubble_srt(player_score);
    
    } catch (Exception e) {}

(измените сортировку пузырьков так, чтобы она принимала данные из списка)

...