【问题标题】:How to parse an array into an object in Java如何将数组解析为Java中的对象
【发布时间】:2017-02-20 03:59:38
【问题描述】:

我的任务是创建一个应用程序,当通过微调器选择学生的姓名时,该应用程序会显示学生的姓名和最终字母成绩。我已经使用名称设置了微调器,并且我已经从存储在 assets 中的文本文件中读取了名称和等级。我使用 StringBuilder 将该文件中的所有信息拆分为一个字符串数组。我想将这些数据解析为一个名为 Student 的对象,以便我可以处理个别学生的成绩,但我不知道该怎么做。任何帮助表示赞赏!

文本文件:

Name            Test1   Test2   Test3   Final
Adam    Anderson    81  90  85  87
Ben Brown       77  80  68  94
Chris   Cross       74  80  56  62
Don Dare        86  94  90  89
Eric    Earl        96  93  90  98
Fred    Foley       79  92  59  86
Gina    Gray        80  83  95  87
Holly   Hank        74  77  75  78
Ian Ingram      66  64  56  60
Jill    Johnson     90  98  78  89

到目前为止我的代码:

package lauren.ruff.lab4;

import android.content.res.AssetManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Spinner;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.StringBuilder;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

TextView name, grade;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    String strName;
    String strLastName;
    String strFirstName;
    String strFinalGrade;
    final String[] strSelected = new String[1];

    final int intTest1;
    int intTest2;
    int intTest3;
    int intFinal;
    int intFinalGrade;
    final int[] intSelection = new int[1];

    int intPointsPossible = 400;

    int finalGrades[] = new int[0];

    AssetManager am = getAssets();
    ArrayList<String> list = new ArrayList<String>();
    BufferedReader reader;
    StringBuilder sb = new StringBuilder();
    String[] tempList = new String[0];
    final ArrayList<Integer> finalList = new ArrayList<>();
    String line = " ";
    String item = " ";

    try {
        InputStream input = am.open("grades.txt");
        reader = new BufferedReader(new InputStreamReader(input));

        while (line != null){
            line = reader.readLine();
            list.add(line);

        }

        input.close();

        list.remove(0);

        for (int i = 0; i < list.size(); i++){
            sb.append(i);
        }

        tempList = sb.toString().split("\\s+");

        for (int j = 0; j < tempList.length; j++){
            finalList.add(j);
        }


    } catch (IOException e) {
        e.printStackTrace();
    }

    final Spinner spinner = (Spinner)findViewById(R.id.spName);

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
            intSelection[0] = spinner.getSelectedItemPosition();
            strSelected[0] = spinner.getSelectedItem().toString();

            name = (TextView)findViewById(R.id.tvDisplayName);
            name.setText(strSelected[0]);

            grade = (TextView)findViewById(R.id.tvDisplayGrade);

            if (intSelection[0] == 0){
                int t1 = finalList.get(2);
                int t2 = finalList.get(3);
                int t3 = finalList.get(4);
                int t4 = finalList.get(5);
                Grades(t1,t2,t3,t4);
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }
    });

}


public String Grades(int t1, int t2, int t3, int t4){
    int test1 = 0, test2 = 0, test3 = 0, finalScore = 0;
    double finalGrade;
    String letterGrade;
    finalGrade = (test1 + test2 + test3 + finalScore)/4;
    if (finalGrade > 93){
        letterGrade = "A";
    }
    else if (finalGrade > 88){
        letterGrade = "B+";
    }
    else if (finalGrade > 83){
        letterGrade = "B";
    }
    else if (finalGrade > 78){
        letterGrade = "C+";
    }
    else if (finalGrade > 73){
        letterGrade = "C";
    }
    else if (finalGrade > 65){
        letterGrade = "D";
    }
    else {
        letterGrade = "F";
    }

    return letterGrade;
}


}

【问题讨论】:

    标签: java android arrays object


    【解决方案1】:

    我同意 Zorglube 的观点。 创建一个学生班。您已经拥有 txt 文件中的所有数据。

    但是,我真的不明白你对数组的使用。

    new String[1] 基本上只是一个String,那么数组有什么用呢?

    另外:在您的公共字符串等级(int t1,int t2,int t3,int t4)

    如果您根本不在方法本身上使用参数,那么有参数有什么意义?

    仍然在这个主题上,看来您在这里所期望的实际上是 public String Grades(integer[] ints)公共字符串成绩(列表整数)

    【讨论】:

      【解决方案2】:

      尝试阅读 txt 文件并创建一个对象而不是添加到列表。 试试这样的。

      YourObject obj = new YourObject();
      try
      {
          List<String> yourLines = Files.readAllLines(java.nio.file.Paths.get("./grades.txt"), StandardCharsets.UTF_8);
          for (String line : yourLines) {
              String[] tokens = line.split(" ");
              obj.setName(tokens[0]);
          }
          System.out.println(obj.toString());
      }
      catch(IOException e)
      {
          e.printStackTrace();
      }`
      

      【讨论】:

        【解决方案3】:

        你可以创建一个 POJO(Plain java object) 类。

        public class StudentPOJO{
        
           private String studentName;
           private String grade;
        
        
           public void setStudent(String studentName){
               this.studentName=studentName;
           }
        
           public void setStudentGrade(String grade){
               this.grade=grade;
           }
        
           public String getStudentGrade(){
               return grade;
           }
        
           public String getStudentName(){
               return studentName;
           }
        
        }
        

        这样您就可以为每个学生创建一个对象来存储他/她的信息。

        【讨论】:

          【解决方案4】:

          在拆分所有数据后,使用良好的参数调用new Strudent(String firstName, String lastName, int[] tests, int final)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-11
            • 1970-01-01
            • 1970-01-01
            • 2019-02-12
            • 2015-11-06
            • 2020-05-02
            相关资源
            最近更新 更多