我需要通过将字符串从第一个字符串拆分为第二个字符串来从另一个String ArrayList创建一个String ArrayList。数据来自BufferedReader读取的.txt文件。这个应用程序应该显示一个微调器,用户可以从中选择学生的名字,然后计算他们的成绩并显示它。现在最大的障碍是当我尝试使用.split时,我得到一个空指针异常。你可能会说,我对此很新,可以使用一些帮助。谢谢!
grades.txt
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
java代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String strName, strLastName, strFirstName, strFinalGrade;
int intTest1, intTest2, intTest3, intFinal, intFinalGrade;
int intPointsPossible = 400;
int finalGrades[] = new int[0];
AssetManager am = getAssets();
ArrayList<String> list = new ArrayList<String>();
ArrayList<String> finalList = finalList = new ArrayList<String>();
BufferedReader reader;
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);
}
while (item != null){
for (int i = 0; i < list.size(); i++){
line.split("\\s+");
finalList.add(item);
}
}
input.close();
} catch (IOException e) {
e.printStackTrace();
}
Spinner spinner = new Spinner(this);
ArrayAdapter<String> dataAdapter =
new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
spinner.setAdapter(dataAdapter);
dataAdapter.notifyDataSetChanged();
}}
答案 0 :(得分:1)
现在最大的障碍是当我尝试使用.split
时,我得到一个空指针异常
您正在运行while (line != null){
这表示此循环有序停止,line
将为null
。
我们假设这是一个错字....
ArrayList<String> finalList = finalList = new ArrayList<String>();
无论如何,您可以Arrays.asList(line.split("\\s+")
获取一个列表,您可以addAll
进入finalList
。
BufferedReader reader;
try {
InputStream input = am.open("grades.txt");
reader = new BufferedReader(new InputStreamReader(input));
String line;
while ((line = reader.readLine()) != null) {
String[] parts = line.split("\\s+");
finalList.addAll(Arrays.asList(parts));
}
input.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) reader.close();
}
虽然,实际上,我认为这不是你想要的。因为
这个应用程序应该显示一个微调器,用户可以从中选择一个学生的名字然后计算他们的成绩并显示它
可能会将每一行解析为Student
个对象,然后finalList
可以List<Student>
public class Student {
String firstName, lastName;
int test1, test2, test3, final; // or List<Integer> tests;
}
然后您需要ArrayAdapter<Student>
,您可以自定义以仅显示学生的姓名。
接下来,您需要Spinner上的项目选择侦听器来计算和显示活动的成绩。
这些是您应该发布新问题的单独问题。
然后,你有Spinner spinner = new Spinner(this);
,但是这个Spinner并不是来自你的XML布局......也许你应该使用findViewById
来获取Spinner