سؤال

كيف يمكنني فرز الفقاعة بشكل صحيح من خلال ملف نصي عن طريق تعيين القيم إلى صفيف. في الكود أدناه ، حاولت تعيين القيم من الملف النصي إلى سلسلة بينما لا يزال هناك شيء ما يجب جلبه. ثم استخدمت حلقة لتخصيص واحد الذي جلبته إلى الصفيف. ثم حاولت استخدام نوع الفقاعة لفرز الأرقام التي أحضرتها من أعلى إلى أدنى مستوياتها. لكني أحصل على هذا كإخراج:

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

الرجاء المساعدة ،

تحديث:سأل أحدهم عن بنية الملف ، هل تشير إلى هذا واحد: هذا هو الملف.

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 * مع splayer_name ، والمحتويات الكاملة لـ * player_score * مع القيمة int لـ s_player_score.

أظن أن ما تحاول القيام به هو إضافة إدخال جديد إلى Player_Name و Player-Score. يجب أن يكون حجم المصفمين مساوياً لعدد الصفوف في الملف النصي ، لذلك قد ترغب في استخدام شكل من أشكال القائمة بدلاً من صفيف.

لكل من صفيفات التخزين (أو القوائم) إضافة الاسم مرة واحدة والنتيجة مرة واحدة وأعتقد أن ذلك سوف يجعلك في طريقك إلى ما تحاول القيام به.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top