Вопрос

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

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){}

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

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

1 a 5
2 b 10
5 x 4
7 h 20
Это было полезно?

Решение

  1. Переместите петлю и bubble_srt() Позвоните за пределы пока цикла. Вы заменяете все содержимое на каждую итерацию, например, то указал более ранний ответ. Вы хотите только разобраться после того, как все содержимое файла будет прочитано.
  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>();
    
    
    
    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) { }

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

Другие советы

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

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

Каждый раз, когда вы читаете в строке. Вы заменяете все содержимое массива * Player_Name * с помощью всего содержимого * player_score * с значением int s_player_score.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top