#java #arrays #multidimensional-array
#java #массивы #многомерный массив
Вопрос:
Я пытаюсь создать 2D-массив. Для хранения продуктов питания со значениями. Я знаю, что делаю что-то не так, кто-нибудь может это увидеть?
public class FoodMenu implements Menu {
static final int MAX_ITEMS = 6;
int numberOfItems = 0;
String[][] foodItems;
public FoodMenu() {
foodItems = new String[MAX_ITEMS][];
addItem("Vegetarian BLT","Test");
addItem("BLT","Test");
addItem("Soup of the day","Test");
}
public FoodMenuIterator(String[][] items) {
this.items = items;
}
public void addItem(String name, String value) {
if (numberOfItems >= MAX_ITEMS) {
System.err.println("Sorry, menu is full! Can't add item to menu");
}
else {
foodItems[numberOfItems][3] = name;
numberOfItems = numberOfItems 1;
}
}
@Override
public boolean hasNext() {
if (position >= items.length || items[position] == null) {
return false;
} else {
return true;
}
}
@Override
public Object next() {
String menuItem = items[position]; ---**//The issue is here**---
position = position 1;
return menuItem;
}
Проблема выше в прокомментированной строке. Ошибка появляется как несовместимые типы: String[] не может быть преобразован в String . Моя цель — добавить тип питания и значение в виде строки в 2d массив.
Как мне исправить эту ошибку? Я пытался указать «String MenuItem = items[position] []; и т.д., чтобы не иметь решения». Есть идеи?
Комментарии:
1. это должно быть
String menuItem = items[position][someIndex]
илиString[] menuItem = items[position];
в зависимости от того, чего вы хотите достичь2. Что
addItem
делать? Что именно говорит stacktrace?3.Похоже
items
, что это 2D массив, поэтому, принимая значение в индексе[position]
, будет возвращен 1D массив, но вы пытаетесь присвоить этому массивуString menuItem = ..
. Чтобы лучше понять это, взгляните на 2d массив, подобныйint[][] numbers2D = { {1,2}, {3,4} }
. Если вы используетеnumbers2D[1]
его, он вернет{3,4}
1D массив, поэтому вы не сможете сделать что-то вродеint num = numbers2D[1];
(какое значение должноnum
содержать:3
или4
или, может быть, что-то еще? Такая вещь не указана, поэтому не допускается на языке Java). Что вы можете сделать, так это выбрать некоторый элемент из этого 1d-массива,numbers2D[1][0]
который будет возвращен3
.4. @Buti’Mnotawrapperclass его для добавления в массив. Я пытаюсь научиться выполнять шаблон итератора с массивами.
Ответ №1:
вы хотите наследовать от итератора Java по умолчанию, иначе вы ничего не переопределяете. компилятор считает, что position является локальной переменной.
Комментарии:
1. Реализация OP
Menu
@Override
относится к методам интерфейса2. мой плохой, я бы сделал тогда итератор отдельным классом, который наследует итератор java.
3. да, потому что позиция нигде не определена. вы хотите превратить итератор в класс и включить в него все эти функции. заставьте итератор расширить итератор java.