簡體   English   中英

如何在Java中將數組解析為對象

[英]How to parse an array into an object in Java

我有一個任務要創建一個應用程序,當通過微調框選擇學生的姓名和最后的字母成績時,該應用程序將顯示該學生的姓名和最后的字母成績。 我已經為微調器設置了名稱,並且已經從資產中存儲的文本文件中讀取了名稱和等級。 我使用StringBuilder將文件中的所有信息拆分為String數組。 我想將這些數據解析為一個名為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;
}


}

嘗試讀取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();
}`

new Strudent(String firstName, String lastName, int[] tests, int final)所有數據后,請使用良好的參數調用new Strudent(String firstName, String lastName, int[] tests, int final)

您可以創建一個POJO(普通java對象)類。

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;
   }

}

這樣,您可以為每個學生創建一個對象來存儲他/她的信息。

我同意Zorglube的觀點。 學生課 您已經擁有txt文件中的所有數據。

但是,我真的不理解您對數組的使用。

一個新的String [1]基本上只是一個String,所以數組是什么?

另外:在您的公共字符串成績上(int t1,int t2,int t3,int t4)

如果根本不在方法本身上使用參數,那么擁有參數有什么意義呢?

仍然在這個主題上,您似乎期望在這里實際上是公共字符串成績(整數[] ints)公共字符串成績(List ints)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM