Одна ошибка - создать слишком много полей. Я не изменял дизайн вашего класса, но я удалил все поля, которые действительно не нужны. Я оставил два: один для ввода и один для вывода, поскольку они не являются основными входными или выходными параметрами функций. Обычно это переменные экземпляра, а не переменные класса (т. Е. Без static
).
Еще одна ошибка - это так называемая односторонняя. Он присутствует, если у вас есть индекс на основе нуля индекс i
, а затем у вас есть ряд элементов i <= b
. Это неверно, должно быть i < b
. Однако, поскольку вы забыли удалить начальную строку чтения после того, как был установлен счетчик b
, вы попытались исправить это таким образом, возможно, оставив вам элемент, который представляет собой просто пустую строку ""
.
Здесь это некоторый код, в котором я также попытался переименовать ваши переменные и имена.
public class Groceries {
private static Scanner scan = new Scanner(System.in);
private static PrintStream out = System.out;
public static void main(String[] args) {
int b = retrieveAmountOfGroceries();
var shoppinglist = retrieveGroceries(b);
printPurchases(shoppinglist);
}
private static void message(String m) {
out.println(m);
}
private static int retrieveAmountOfGroceries() {
message("How many articles do you want to buy?");
int amount = scan.nextInt();
// remove the next newline
scan.nextLine();
return amount;
}
private static ArrayList<String> retrieveGroceries(int amountOfGroceries) {
var shoppinglist = new ArrayList<String>();
message("Which articles specifically do you want to buy?");
// note that we're having i < b not i <= b
for (int i = 0; i < amountOfGroceries; i++) {
String n = scan.nextLine();
shoppinglist.add(n);
}
return shoppinglist;
}
private static void printPurchases(ArrayList<String> shoppinglist) {
message("Here are your purchases:");
for (int i = 0; i < shoppinglist.size(); i++) {
message(shoppinglist.get(i));
}
}
}