gpt4 book ai didi

java - 从两个可膨胀的 Edittext arrayList 获取值并计算值

转载 作者:太空宇宙 更新时间:2023-11-04 10:36:09 25 4
gpt4 key购买 nike

我目前正在开发一个程序,我可以使用两个充气编辑文本并用它们进行计算。因此,我尝试获取每个值,将它们放入指定的数组列表中,并根据相应的数组计算值,但是我遇到了麻烦,因为我遇到了 indexoutofbounds 异常,而且我不知道我的代码是否正常工作。我可以寻求帮助吗?

这是我的代码。

public class CalculateActivity extends AppCompatActivity {
Button calculate;
LinearLayout courses;
ArrayList<Course> coursesList;
SemesterDatabase db;
TextView gpa;
int percentage = 0;
int hundredth =0;
float averageGrade = 0.0f;

float[] gradePoints = new float[]{};


ArrayList<Float> gradesList = new ArrayList();
ArrayList<Float> scoreList = new ArrayList();
ArrayList<Float> totalList = new ArrayList();



int id;
TextView semester;

class C03171 implements OnClickListener {
C03171() {
}

public void onClick(View view) {
float gradePointsCalc = 0.0f;
float totalCrdtHrs = 0.0f;

//Jyoti JK 编辑,谢谢您的帮助

            for (int x = 0; x < scoreList.size()&& x<totalList.size(); x++)

{CalculateActivity.this.gradesList.add(scoreList.get(x) / totalList.get(x));
}



for (int i = 0; i < CalculateActivity.this.coursesList.size(); i++) {
int crdtHrs = ((Course) CalculateActivity.this.coursesList.get(i)).getCreditHours();
totalCrdtHrs += (float) crdtHrs;
averageGrade += (((Float)CalculateActivity.this.gradesList.get(i).floatValue())*(((Course) CalculateActivity.this.coursesList.get(i)).getCreditHours())/totalCrdtHrs);

}
float gpaCalc = averageGrade;
CalculateActivity.this.gpa.setText(String.format("%.3f", new Object[]{Float.valueOf(gpaCalc)}));
}
}


class C03194 implements DialogInterface.OnClickListener {
C03194() {
}

public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
}

class C03205 implements DialogInterface.OnClickListener {
C03205() {
}

public void onClick(DialogInterface dialogInterface, int i) {
CalculateActivity.this.db.deleteSemester(CalculateActivity.this.id);
CalculateActivity.this.db.deleteAllCourses(CalculateActivity.this.id);
CalculateActivity.this.onBackPressed();
}
}



protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView((int) R.layout.activity_calculate);
setSupportActionBar((Toolbar) findViewById( R.id.toolbar));
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle((CharSequence) "Calculate GPA");
this.db = new SemesterDatabase(this);
this.id = getIntent().getIntExtra("semesterId", 1);
this.coursesList = this.db.getAllCourses(this.id);
this.semester = (TextView) findViewById(R.id.semester);
this.semester.setText(getIntent().getStringExtra("semesterName"));
this.gpa = (TextView) findViewById(R.id.gpa);
this.calculate = (Button) findViewById(R.id.calculate);
this.courses = (LinearLayout) findViewById(R.id.courses);
addCourses();
this.calculate.setOnClickListener(new C03171());

}

public void addCourses() {
LayoutInflater inflater = LayoutInflater.from(this);
for (int i = 0; i < this.coursesList.size(); i++) {
View v = inflater.inflate(R.layout.item_course, null, false);
this.courses.addView(v);
final int position = CalculateActivity.this.scoreList.size();
final int position2 = CalculateActivity.this.totalList.size();
CalculateActivity.this.scoreList.add(0.0f);
final EditText Score = (EditText) v.findViewById(R.id.Score);
final EditText Total = (EditText) v.findViewById(R.id.Total);

Score.addTextChangedListener(new TextWatcher() {
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}


public void afterTextChanged(Editable editable) {
percentage = Integer.parseInt(editable.toString());
float perc = (float) percentage;
CalculateActivity.this.scoreList.set(position, perc);

}
});

Total.addTextChangedListener(new TextWatcher() {
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

public void afterTextChanged(Editable editable) {
hundredth = Integer.parseInt(editable.toString());
float hund = (float) percentage;
CalculateActivity.this.scoreList.set(position, hund);

}
});




}
}

基本上我认为我的代码正在做的是从

获取edittext值
 Score.addTextChangedListener(new TextWatcher() {
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}


public void afterTextChanged(Editable editable) {
percentage = Integer.parseInt(editable.toString());
float perc = (float) percentage;
CalculateActivity.this.scoreList.set(position, perc);

}
});

Total.addTextChangedListener(new TextWatcher() {
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

public void afterTextChanged(Editable editable) {
hundredth = Integer.parseInt(editable.toString());
float hund = (float) percentage;
CalculateActivity.this.scoreList.set(position, hund);

}
});

并将值获取到

for (int x = 0; x < scoreList.size(); x++)

{
ArrayList<Float> finalscore = new ArrayList();
finalscore.add(scoreList.get(x) / totalList.get(x));
for (int j = 0; j < finalscore.size(); j++)

{
CalculateActivity.this.gradesList.add(finalscore.get(j));
}
}

最后使用

进行计算
 for (int i = 0; i < CalculateActivity.this.coursesList.size(); i++) {

averageGrade += ((Float)CalculateActivity.this.gradesList.get(i).floatValue())*(((Course) CalculateActivity.this.coursesList.get(i)).getCreditHours());

}
float gpaCalc = averageGrade;
CalculateActivity.this.gpa.setText(String.format("%.3f", new Object[]{Float.valueOf(gpaCalc)}));

但我完全不知道哪里出了问题,也不知道如何查看哪里出了问题。我将不胜感激详细的评论!

哦,这是错误日志。

FATAL EXCEPTION: main
Process: com.example.joon.chadwickgrades, PID: 19395
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:411)
at com.example.joon.chadwickgrades.CalculateActivity$C03171.onClick(CalculateActivity.java:66)
at android.view.View.performClick(View.java:5623)
at android.view.View$PerformClick.run(View.java:22433)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6247)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)

最佳答案

作为您的代码,

for (int x = 0; x < scoreList.size(); x++)

{
ArrayList<Float> finalscore = new ArrayList();
finalscore.add(scoreList.get(x) / totalList.get(x));
for (int j = 0; j < finalscore.size(); j++)

{
CalculateActivity.this.gradesList.add(finalscore.get(j));
}
}

对于每次迭代,

1.您正在创建 Finalscore 数组列表对象。

2.并且只向其中添加一个元素。

3.然后内部for循环开始。 Finalscore 的大小始终为 1。您正在将其添加到 GradesList 中。

我认为你可以将其更改为,

 for (int x = 0; x < scoreList.size() && x<totalList.size(); x++)

{

CalculateActivity.this.gradesList.add(scoreList.get(x) / totalList.get(x));

}

并更改代码,例如,

for (int i = 0; i < CalculateActivity.this.coursesList.size() && i <CalculateActivity.this.gradesList.size(); i++) {
int crdtHrs = ((Course) CalculateActivity.this.coursesList.get(i)).getCreditHours();
totalCrdtHrs += (float) crdtHrs;
averageGrade += (((Float)CalculateActivity.this.gradesList.get(i).floatValue())*(((Course) CalculateActivity.this.coursesList.get(i)).getCreditHours())/totalCrdtHrs);

}

编辑:

重点是,每当您从列表中获取数据时,您都需要检查它是否为空以及它的大小。这是避免异常的最佳实践

关于java - 从两个可膨胀的 Edittext arrayList 获取值并计算值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49447649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com