Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何对对象(玩家姓名和玩家分数)的数组列表进行排序_Java_Android_Arrays_Sorting - Fatal编程技术网

Java 如何对对象(玩家姓名和玩家分数)的数组列表进行排序

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

我试图解决这个问题,但我不知道我做错了什么,尝试了很多事情已经过去了7天,我需要帮助解决它,请,我认为错误在我创建的类上

我有4个球员,4个文本视图和4个其他文本视图的球员得分。此外,我还为place1、place2、place3、place4创建了另外4个新的文本视图。我想做的是,我需要对分数进行排序,并将其显示在第1、2、3、4位,以及拥有该分数的球员的姓名

到目前为止,我所做的是将类创建到
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