2017-01-27 4 views
1

Я пытаюсь решить это, но я не знаю, что я делаю неправильно, прошло 7 дней, чтобы попробовать много вещей, мне нужна помощь в его решении пожалуйста, и я думаю, что ошибка в моем созданном классе.Как отсортировать ArrayList объектов (имена игроков и оценки игроков)

У меня есть 4 игрока с 4 текстовым видом и 4 других текстовых вида для оценки игроков. Кроме того, я сделал еще один 4-х текстовых просмотров для place1, place2, place3, place4. Что я хочу сделать, так это то, что мне нужно сортировать оценки и отображать их в place1, place2, place3, place4 вместе с именем этого игрока, у которого этот счет.

То, что я сделал до сих пор является то, что я создал свой класс в основную деятельность над секцией

public class MainActivity extends AppCompatActivity { 

    //my created class 
    class JucatorScor { 

     public String Name; 
     public int Scor; 

     public JucatorScor (String sName, int iScor) { 
      this.Name = sName; 
      this.Scor = iScor; 
     } 
    } 

    //begin oncreate 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
    //end oncreate 
} 

onCreate И у меня также есть кнопка, при нажатии кнопки, читайте мои значения от названия вида текста игроков, оценка игроков и после сортировки отображения массива Place1, place2, place3, place4 так:

//begin button click 
public void sorteazaCLICK (View view) { 

    //initialization place1, place2, place3, place4 where i will put the sorting value 
    TextView varPozitia1 = (TextView) findViewById(R.id.text_loc1); 
    TextView varPozitia2 = (TextView) findViewById(R.id.text_loc2); 
    TextView varPozitia3 = (TextView) findViewById(R.id.text_loc3); 
    TextView varPozitia4 = (TextView) findViewById(R.id.text_loc4); 

    //initialization name of players 
    TextView varNumeJucator1 = (TextView) findViewById(R.id.text_numeJuc1); 
    String sNameJuc1; 
    sNameJuc1 = varNumeJucator1.getText().toString(); 

    TextView varNumeJucator2 = (TextView) findViewById(R.id.text_numeJuc2); 
    String sNameJuc2; 
    sNameJuc2 = varNumeJucator1.getText().toString(); 

    TextView varNumeJucator3 = (TextView) findViewById(R.id.text_numeJuc3); 
    String sNameJuc3; 
    sNameJuc3 = varNumeJucator1.getText().toString(); 

    TextView varNumeJucator4 = (TextView) findViewById(R.id.text_numeJuc4); 
    String sNameJuc4; 
    sNameJuc4 = varNumeJucator1.getText().toString(); 

    //initialization scores 
    TextView varScorJucator1 = (TextView) findViewById(R.id.text_scorJuc1); 
    String t1; 
    t1 = varScorJucator1.getText().toString(); 

    TextView varScorJucator2 = (TextView) findViewById(R.id.text_scorJuc2); 
    String t2; 
    t2 = varScorJucator2.getText().toString(); 

    TextView varScorJucator3 = (TextView) findViewById(R.id.text_scorJuc3); 
    String t3; 
    t3 = varScorJucator1.getText().toString(); 

    TextView varScorJucator4 = (TextView) findViewById(R.id.text_scorJuc4); 
    String t4; 
    t4 = varScorJucator1.getText().toString(); 


    //transform the values from text view scores into integer 
    int iScorJuc1; 
    iScorJuc1 = Integer.parseInt(t1); 

    int iScorJuc2; 
    iScorJuc2 = Integer.parseInt(t2); 

    int iScorJuc3; 
    iScorJuc3 = Integer.parseInt(t3); 

    int iScorJuc4; 
    iScorJuc4 = Integer.parseInt(t4); 


    ArrayList<JucatorScor> arrJucatorScor = new ArrayList<>(4); 


     //building manually the array list 
     arrJucatorScor.add(new JucatorScor(sNameJuc1, iScorJuc1)); //position 0 
     arrJucatorScor.add(new JucatorScor(sNameJuc2, iScorJuc2)); //position 1 
     arrJucatorScor.add(new JucatorScor(sNameJuc3, iScorJuc3)); //position 2 
     arrJucatorScor.add(new JucatorScor(sNameJuc4, iScorJuc4)); //position 3 

    Collections.sort(arrJucatorScor, new Comparator<JucatorScor>() { 

     //sorting my object array depending on scores 
     @Override 
     public int compare(JucatorScor o1, JucatorScor o2) { 
      return Integer.valueOf(o1.Scor).compareTo(o2.Scor); 
     } 

    }); 


    //here display them from bigger to smaller according to eatch place1, place2, place3, place4 
    varPozitia1.setText(String.valueOf(arrJucatorScor.get(3))); 
    varPozitia2.setText(String.valueOf(arrJucatorScor.get(2))); 
    varPozitia3.setText(String.valueOf(arrJucatorScor.get(1))); 
    varPozitia4.setText(String.valueOf(arrJucatorScor.get(0))); 

} //end button click 

проблема заключается в том, что при нажатии на кнопку, не ставьте на Place1, place2, place3, place4 имя и оценка отсортированы ... просто появятся некоторые вещи l икэ на этой фотографии:

screenshot

ответ

2

Здесь используется toString() метода JucatorScor для визуализации объектов:

varPozitia1.setText(String.valueOf(arrJucatorScor.get(3))); 
varPozitia2.setText(String.valueOf(arrJucatorScor.get(2))); 
varPozitia3.setText(String.valueOf(arrJucatorScor.get(1))); 
varPozitia4.setText(String.valueOf(arrJucatorScor.get(0))); 

То, что вы видите на экране является реализацией toString() по умолчанию предусмотрено базовый класс ,

Либо вы реализуете toString() с желанным текстом

или другим решением, чтобы выполнить рендеринг в вспомогательном методе, а также устанавливает соответствующий String в TextView:

public set renderTopJucatorScor(JucatorScor jucatorScor, int ranking, TextView varPozitia){  
    varPozitia.setText("Loc" + ranking + " = " + jucatorScor.getName() + jucatorScor.getScore()); 
} 

Тогда вам может вызвать вспомогательный метод:

renderTopJucatorScor(varPozitia1, arrJucatorScor.get(3), 1); 
renderTopJucatorScor(varPozitia2, arrJucatorScor.get(2), 2); 
renderTopJucatorScor(varPozitia3, arrJucatorScor.get(1), 3); 
renderTopJucatorScor(varPozitia4, arrJucatorScor.get(0), 4); 
+0

спасибо большое за ответ ... но ... я не понимаю..может ли я пример с кодом PLS? Я попробовал это, чтобы надеть мой класс @Override public String toString() { return Name + "" + Scor; } но не показывают corectlly результатов: (( я судимые с помощью renderTopJucatorScor но набор в красном цвете, и я не знаю, куда поместить этот код в классе или в кнопку мыши –

+1

Вы можете?. Если вы добавите метод toString() в класс JucatorScor, он должен работать. Вы заметили какие-либо изменения в рендеринге? Если вы не видите ничего, возможно, скомпилированный код не обновляется. – davidxxx

+0

мой созданный класс выглядит так: класс JucatorScor { public String Name; public int Scor; public JucatorScor (String sName, int iScor) { this.Name = sName; this.Scor = iScor; } @Override public String toString() { return Name + "" + Scor; } } это все изменения я maded только в классе и когда я запустить app..the отображение результатов подобны этим место1 = Aladin 550 Place2 = Аладин 120 place3 = Aladin 120 Place4 = Aladin 120 –

1

После обнаружения (с помощью пользователя «davidxxx»), некоторые ошибки в моей инициализации текстовых просмотров, finnaly мне удалось решить проблему. Также я добавил в свой созданный класс метод: toString.

Правильное решение заключается в следующем:

//my created class 
class JucatorScor { 

    public String Name; 
    public int Scor; 

    public JucatorScor (String sName, int iScor) { 
     this.Name = sName; 
     this.Scor = iScor; 
    } 
//this is the toString added to diplay name and score 
    @Override 
    public String toString() { 
     return Name + " " + Scor; 
    } 

} 

и exectution код с кнопки мыши

//begin button click 
public void sorteazaCLICK(View view) { 

    //initialization of textvies for place1 to place 4 
    TextView varPozitia1 = (TextView) findViewById(R.id.text_loc1); 
    TextView varPozitia2 = (TextView) findViewById(R.id.text_loc2); 
    TextView varPozitia3 = (TextView) findViewById(R.id.text_loc3); 
    TextView varPozitia4 = (TextView) findViewById(R.id.text_loc4); 

    //initialization for name of players 
    TextView varNumeJucator1 = (TextView) findViewById(R.id.text_numeJuc1); 
    String sNameJuc1; 
    sNameJuc1 = varNumeJucator1.getText().toString(); 

    TextView varNumeJucator2 = (TextView) findViewById(R.id.text_numeJuc2); 
    String sNameJuc2; 
    sNameJuc2 = varNumeJucator2.getText().toString(); 

    TextView varNumeJucator3 = (TextView) findViewById(R.id.text_numeJuc3); 
    String sNameJuc3; 
    sNameJuc3 = varNumeJucator3.getText().toString(); 

    TextView varNumeJucator4 = (TextView) findViewById(R.id.text_numeJuc4); 
    String sNameJuc4; 
    sNameJuc4 = varNumeJucator4.getText().toString(); 

    //initialization of scores 
    TextView varScorJucator1 = (TextView) findViewById(R.id.text_scorJuc1); 
    String t1; 
    t1 = varScorJucator1.getText().toString(); 

    TextView varScorJucator2 = (TextView) findViewById(R.id.text_scorJuc2); 
    String t2; 
    t2 = varScorJucator2.getText().toString(); 

    TextView varScorJucator3 = (TextView) findViewById(R.id.text_scorJuc3); 
    String t3; 
    t3 = varScorJucator3.getText().toString(); 

    TextView varScorJucator4 = (TextView) findViewById(R.id.text_scorJuc4); 
    String t4; 
    t4 = varScorJucator4.getText().toString(); 


    //transformation scores into integer values 
    int iScorJuc1; 
    iScorJuc1 = Integer.parseInt(t1); 

    int iScorJuc2; 
    iScorJuc2 = Integer.parseInt(t2); 

    int iScorJuc3; 
    iScorJuc3 = Integer.parseInt(t3); 

    int iScorJuc4; 
    iScorJuc4 = Integer.parseInt(t4); 


    ArrayList<JucatorScor> arrJucatorScor = new ArrayList<>(4); 


    //manually construct of the object array list 
    arrJucatorScor.add(new JucatorScor(sNameJuc1, iScorJuc1)); //position 0 
    arrJucatorScor.add(new JucatorScor(sNameJuc2, iScorJuc2)); //position 1 
    arrJucatorScor.add(new JucatorScor(sNameJuc3, iScorJuc3)); //position 2 
    arrJucatorScor.add(new JucatorScor(sNameJuc4, iScorJuc4)); //position 3 

    Collections.sort(arrJucatorScor, new Comparator<JucatorScor>() { 

     //the sort of the object list by their scores 
     @Override 
     public int compare(JucatorScor o1, JucatorScor o2) { 
      return Integer.valueOf(o1.Scor).compareTo(o2.Scor); 
     } 

    }); 


    //here are displayed in the position place1 to place4 from bigger score to smaller score 
    varPozitia1.setText(String.valueOf(arrJucatorScor.get(3))); 
    varPozitia2.setText(String.valueOf(arrJucatorScor.get(2))); 
    varPozitia3.setText(String.valueOf(arrJucatorScor.get(1))); 
    varPozitia4.setText(String.valueOf(arrJucatorScor.get(0))); 


}//end button click 

Большое спасибо за помощь.

Смежные вопросы