Java 如何对对象(玩家姓名和玩家分数)的数组列表进行排序
我试图解决这个问题,但我不知道我做错了什么,尝试了很多事情已经过去了7天,我需要帮助解决它,请,我认为错误在我创建的类上 我有4个球员,4个文本视图和4个其他文本视图的球员得分。此外,我还为place1、place2、place3、place4创建了另外4个新的文本视图。我想做的是,我需要对分数进行排序,并将其显示在第1、2、3、4位,以及拥有该分数的球员的姓名 到目前为止,我所做的是将类创建到Java 如何对对象(玩家姓名和玩家分数)的数组列表进行排序,java,android,arrays,sorting,Java,Android,Arrays,Sorting,我试图解决这个问题,但我不知道我做错了什么,尝试了很多事情已经过去了7天,我需要帮助解决它,请,我认为错误在我创建的类上 我有4个球员,4个文本视图和4个其他文本视图的球员得分。此外,我还为place1、place2、place3、place4创建了另外4个新的文本视图。我想做的是,我需要对分数进行排序,并将其显示在第1、2、3、4位,以及拥有该分数的球员的姓名 到目前为止,我所做的是将类创建到onCreate部分上方的主活动中 public class MainActivity extends
onCreate
部分上方的主活动中
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
}
我还有一个按钮,当我点击它时,从文本视图中读取我的值球员的名字,球员的分数,排序后的数组显示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,我将在其中放置排序值
TextView varPozitia1=(TextView)findViewById(R.id.text\u loc1);
TextView varPozitia2=(TextView)findViewById(R.id.text\u loc2);
TextView varPozitia3=(TextView)findViewById(R.id.text\u loc3);
TextView varPozitia4=(TextView)findViewById(R.id.text\u loc4);
//球员姓名
TextView varNumeJucator1=(TextView)findViewById(R.id.text\u numeJuc1);
字符串sNameJuc1;
sNameJuc1=varNumeJucator1.getText().toString();
TextView varNumeJucator2=(TextView)findViewById(R.id.text\u numeJuc2);
字符串sNameJuc2;
sNameJuc2=varNumeJucator1.getText().toString();
TextView varNumeJucator3=(TextView)findViewById(R.id.text\u numeJuc3);
线状sNameJuc3;
sNameJuc3=varNumeJucator1.getText().toString();
TextView varNumeJucator4=(TextView)findViewById(R.id.text\u numeJuc4);
线状sNameJuc4;
sNameJuc4=varNumeJucator1.getText().toString();
//初始化分数
TextView varScorJucator1=(TextView)findViewById(R.id.text\u scorJuc1);
字符串t1;
t1=varScorJucator1.getText().toString();
TextView varScorJucator2=(TextView)findViewById(R.id.text_scorJuc2);
t2串;
t2=varScorJucator2.getText().toString();
TextView varScorJucator3=(TextView)findViewById(R.id.text\u scorJuc3);
t3串;
t3=varScorJucator1.getText().toString();
TextView varScorJucator4=(TextView)findViewById(R.id.text\u scorJuc4);
字符串t4;
t4=varScorJucator1.getText().toString();
//将文本视图分数中的值转换为整数
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 arrJucatorScor=新的ArrayList(4);
//手动生成阵列列表
arrJucatorScor.add(新JucatorScor(sNameJuc1,iScorJuc1));//位置0
arrJucatorScor.add(新JucatorScor(sNameJuc2,iScorJuc2));//位置1
arrJucatorScor.add(新JucatorScor(sNameJuc3,iScorJuc3));//位置2
arrJucatorScor.add(新JucatorScor(sNameJuc4,iScorJuc4));//位置3
Collections.sort(arrJucatorScor,newcomparator(){
//根据分数对对象数组进行排序
@凌驾
公共整数比较(JucatorScor o1,JucatorScor o2){
返回整数.valueOf(o1.Scor).compareTo(o2.Scor);
}
});
//这里根据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));
}//结束按钮单击
问题是,当我点击按钮时,不要把名字和分数放在第1、第2、第3、第4位。。。只是在这张照片中出现一些类似的东西:
这里使用
JucatorScor
的toString()
方法渲染对象:
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()
或者,另一种解决方案是在助手方法中执行渲染,该方法还可以在TextView
中设置合适的String
:
public set renderTopJucatorScor(JucatorScor jucatorScor, int ranking, TextView varPozitia){
varPozitia.setText("Loc" + ranking + " = " + jucatorScor.getName() + jucatorScor.getScore());
}
然后您可以这样调用helper方法:
renderTopJucatorScor(varPozitia1, arrJucatorScor.get(3), 1);
renderTopJucatorScor(varPozitia2, arrJucatorScor.get(2), 2);
renderTopJucatorScor(varPozitia3, arrJucatorScor.get(1), 3);
renderTopJucatorScor(varPozitia4, arrJucatorScor.get(0), 4);
在发现(在用户“davidxxx”的帮助下)我初始化文本视图时出现了一些错误后,我终于设法解决了这个问题。我还在创建的类中添加了一个方法: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;
}
}
然后单击按钮中的执行代码
//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
//开始按钮单击
公共空视图单击(查看){
//位置1到位置4的文本变量初始化
TextView varPozitia1=(TextView)findViewById(R.id.text\u loc1);
TextView varPozitia2=(TextView)findViewById(R.id.text\u loc2);
TextView varPozitia3=(TextView)findViewById(R.id.text\u loc3);
TextView varPozitia4=(TextView)findViewById(R.id.text\u loc4);
//球员姓名的初始化
TextView varNumeJucator1=(TextView)findViewById(R.id.text\u numeJuc1);
字符串sNameJuc1;
sNameJuc1=varNumeJucator1.getText().toString();
TextView varNumeJucator2=(TextView)findViewById(R.id.text\u numeJuc2);
字符串sNameJuc2;
sNameJuc2=varNumeJucator2.getText().toString();
TextView varNumeJucator3=(TextView)findViewById(R.id.text\u numeJuc3);
线状sNameJuc3;
sNameJuc3=varNumeJucator3.getText().toString();
TextView varNumeJucator4=(TextView)findViewById(R.id.text\u numeJuc4);
线状sNameJuc4;
sNameJuc4=varNumeJucator4.getText().toString();
//分数初始化
TextView varScorJucator1