gpt4 book ai didi

java - 为什么在数组中查找最大值和最小值时我的应用程序崩溃?

转载 作者:行者123 更新时间:2023-12-01 17:29:03 25 4
gpt4 key购买 nike

尝试在数组中查找最大值和最小值时,由于某种原因,我的应用程序崩溃了。它曾经工作过,但现在我做到了,因此数据保存在文件中。函数是否需要额外的参数才能使其正常工作?

public class MainActivity extends AppCompatActivity {
ArrayList<String> pavardes = new ArrayList<String>();
ArrayList<Integer> amziai = new ArrayList<Integer>();
ArrayList<String> issilavinimai = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

TextView rez = findViewById(R.id.rez);
rez.setText("");

try {
FileInputStream fis = openFileInput("Karnauskas.12");
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader bufferedReader = new BufferedReader(isr);

String line = "";
while ((line = bufferedReader.readLine()) != null) {
String[] mas = line.split(" - ");
if (mas.length == 3) {
pavardes.add(mas[0]);
amziai.add(Integer.parseInt(mas[1]));
issilavinimai.add(mas[2]);
}
}
} catch (Exception e) {
rez.setText("Klaida");
}


}
public void saugoti(View v) {
EditText pavard = findViewById(R.id.pavarde);
pavardes.add(pavard.getText().toString());

EditText amz = findViewById(R.id.amzius);
amziai.add(Integer.parseInt(amz.getText().toString()));

Spinner issilav = findViewById(R.id.issilavinimas);
issilavinimai.add(issilav.getSelectedItem().toString());

TextView rez = findViewById(R.id.rez);
rez.setText("Išsaugota");

pavard.setText("");
amz.setText("");
issilav.setSelection(1);
}

public void kitasLangas(View v) {
Intent duom = new Intent(this, langas2.class);
duom.putStringArrayListExtra("pavardes", pavardes);
duom.putIntegerArrayListExtra("amziai", amziai);
duom.putStringArrayListExtra("issilavinimai", issilavinimai);
startActivity(duom);
}

public void skaiciuoti(View v){
int min = 999;
int max = 0;
String min_pavarde = "";
String min_issilavinimas = "";
String max_pavarde = "";
String max_issilavinimas = "";
TextView rez = findViewById(R.id.rez2);
if (amziai.isEmpty()){
rez.setText("No data");
} else {
for (int i = 0; i < amziai.size(); i++) {
if (min > amziai.get(i)) {
min = amziai.get(i);
min_pavarde = pavardes.get(i);
min_issilavinimas = issilavinimai.get(i);
}
if (max < amziai.get(i)) {
max = amziai.get(i);
max_pavarde = pavardes.get(i);
max_issilavinimas = issilavinimai.get(i);
}
}
rez.setText("MIN: "+min_pavarde+" "+min+" "+min_issilavinimas+"\n");
rez.append("MAX: "+max_pavarde+" "+max+" "+max_issilavinimas+"\n");
}
}

public void valyti(View v) {
pavardes.clear();
amziai.clear();
issilavinimai.clear();
TextView rez = findViewById(R.id.rez);
rez.setText("Išvalyta");
}

@Override
protected void onStop() {
super.onStop();

TextView rez = findViewById(R.id.rez);
try {
FileOutputStream fos = openFileOutput("Karnauskas.12", Context.MODE_PRIVATE);
for(int i = 0; i < pavardes.size(); i++){
String eilute = pavardes.get(i)+" - "+amziai.get(i)+ " - "+issilavinimai.get(i)+"\n";
fos.write(eilute.getBytes());
}
fos.close();
rez.setText("Išsaugota");
} catch (FileNotFoundException e) {
rez.setText("Klaida 1");
} catch (IOException e) {
rez.setText("Klaida 2");
}
}


我猜问题出在@override部分,因为删除该部分不会再使应用程序崩溃,并且最小/最大值仅给出“无数据”,但随后所有其他按钮使应用程序崩溃。我真的很感谢您的帮助!

最佳答案

minmax的逻辑错误。如下进行:

public void skaiciuoti(View v) {
TextView rez = findViewById(R.id.rez2);
// Check amziai, pavardes, and issilavinimai for null before performing any
// operation on them.
if (amziai != null && pavardes != null && issilavinimai != null && amziai.size() > 0 && pavardes.size() > 0
&& issilavinimai.size() > 0) {
// Assign the first element to min and max
int min = amziai.get(0);
int max = amziai.get(0);
String min_pavarde = pavardes.get(0);
String min_issilavinimas = issilavinimai.get(0);
String max_pavarde = pavardes.get(0);
String max_issilavinimas = issilavinimai.get(0);
// Loop from index 1. Also, compare the loop counter with the size of amziai,
// pavardes, and issilavinimai.
for (int i = 1; i < amziai.size() && i < pavardes.size() && i < issilavinimai.size(); i++) {
if (min > amziai.get(i)) {
min = amziai.get(i);
min_pavarde = pavardes.get(i);
min_issilavinimas = issilavinimai.get(i);
}
if (max < amziai.get(i)) {
max = amziai.get(i);
max_pavarde = pavardes.get(i);
max_issilavinimas = issilavinimai.get(i);
}
}
rez.setText("MIN: " + min_pavarde + " " + min + " " + min_issilavinimas + System.getProperty ("line.separator"));
rez.append("MAX: " + max_pavarde + " " + max + " " + max_issilavinimas);
} else {
rez.setText("No data");
}
}


如有任何疑问/问题,请随时发表评论。

关于java - 为什么在数组中查找最大值和最小值时我的应用程序崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61159792/

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