2016-10-11 20 views
0

我有一個分配創建一個應用程序,顯示學生的姓名和最後一個字母年級的時候,通過微調選擇他們的名字。我已經用名稱設置了微調器,並且我已經從存儲在資產中的文本文件中讀取了名稱和成績。我使用StringBuilder將該文件中的所有信息拆分爲一個字符串數組。我想將這些數據解析爲一個名爲Student的對象,以便我可以爲每個學生處理成績,但我無法弄清楚如何做到這一點。任何幫助表示讚賞!如何解析數組對象在Java中

的文本文件:

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


} 

回答

0

劈裂後的所有數據調用帶有很好的理由的new Strudent(String firstName, String lastName, int[] tests, int final)

0

您可以創建一個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; 
    } 

} 

這樣你就可以爲每個學生創建一個對象來存儲他/她的信息。

1

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

我同意Zorglube這一項。 製作學生課。您已經擁有txt文件中的所有數據。

不過,我真的不明白你的陣列的使用。

A new String [1]基本上只是一個字符串所以數組是什麼?

另外:您公共字符串等級(INT T1,INT T2,INT T3,INT T4)

什麼,如果你不使用它們的方法本身都具有參數的意義呢?

而且仍然在這個問題上,似乎有什麼你期待在這裏實際上是 公共字符串等級(整數[]整數)公共字符串等級(名單整數)