Я делаю эту небольшую программу, которая записывает произведенные единицы, вот как это работает
пользователь вводит значение единиц, изготовленных из каждого отдела
Dept 1: 1
Dept 2: 5
Dept 3: 2
Dept 4: 3
Результаты должны быть такими:
Dept 1: *
Dept 2: *****
Dept 3: **
Dept 4: ***
Однако, когда я пробую этот код, который я сделал, он дает мне null
значение:
else if(e.getSource()==btnView){
int num1 = Integer.parseInt(txtdept1.getText());
int num2 = Integer.parseInt(txtdept2.getText());
int num3 = Integer.parseInt(txtdept3.getText());
int num4 = Integer.parseInt(txtdept4.getText());
for (int i = 0; i < num1; ++i) {
str += "*";
txtdept1record.setText(str);
}
Результат будет следующим:
Dept 1: null*
Это для цикла выше только для dept1.
Оптимизируйте свой цикл как:
for (int i = 0; i < num1; ++i) {
if( i == 0 ) //i.e. first time
str = "";
str += "*";
}
txtdept1record.setText(str); //outside :-)
Но это не рекомендуется, поэтому используйте StringBuilder
StringBuilder sb = new StringBuilder();
for (int i = 0; i < num1; ++i) {
sb.append("*");
}
txtdept1record.setText(str); //outside :-)
Ваш (надежный) код:
...
else if(e.getSource()==btnView){
int num1 = Integer.parseInt(txtdept1.getText());
int num2 = Integer.parseInt(txtdept2.getText());
int num3 = Integer.parseInt(txtdept3.getText());
int num4 = Integer.parseInt(txtdept4.getText());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < num1; ++i) {
sb.append("*");
}
txtdept1record.setText(sb.toString());
sb = new StringBuilder(); //empty it.
//Same thing (i'll show once)
for (int i = 0; i < num1; ++i) {
sb.append("*");
}
txtdept2record.setText(sb.toString());
...
Начать с String str = "";
Я думаю, что вы определили как эту String str;
txtdept1record.setText(sb.toString());
наконец: вне петли.