[英]How to parse a json array with an array inside to a java object with a Set
[英]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.