Java For Loop - измените эту «переменную класса»

Я новичок в Java (и задаю вопросы на этом сайте.) И пытаюсь изменить переменную itemList с inputs.Items.itemlist1 каждый раз, когда цикл for запускается с itemlist1 на itemList2, а затем с itemList3. Вот мой код:

items.java

public class Items {

public static Object[][] itemList1 = new Object[][]{
    {"book", 12.49f, "BOOK"},
    {"Music CD", 14.99f, "OTHERS"},
    {"chocolate bar", 0.85f, "FOOD"},};
public static Object[][] itemList2 = new Object[][]{
    {"imported box of chocolates", 10.00f, "IMPORTED_FOOD"},
    {"imported bottle of perfume", 47.50f, "IMPORTED_OTHER"},};
public static Object[][] itemList3 = new Object[][]{
    {"imported bottle of perfume", 27.99f, "IMPORTED_OTHER"},
    {"bottle of perfume", 18.99f, "OTHERS"},
    {"packet of headache pills", 9.75f, "MEDICAL"},
    {"box of imported chocolates", 11.25f, "IMPORTED_FOOD"}
};

public static Object[] possibleListLength = new Object[]{itemList1.length, itemList2.length, itemList3.length};
public static Object[] possibleList = new Object[][]{itemList1, itemList2, itemList3};

}

DetermineItem.java

package tax;
import java.util.Arrays;
import java.util.ArrayList;
public class DetermineItem {
    public static String itemPriceString = "";
    public static void main(String[] args) {
        //System.out.println(Arrays.deepToString(inputs.Items.itemList1));
        Object arrayLength = inputs.Items.possibleList.length;
        int arrayLengthInt = (Integer) arrayLength + 1;
        for (int j = 1; j < 4; j++) {
            System.out.println("Output " + j + ":");
            for (int i = 0; i < arrayLengthInt; i++) {
                Object[][] itemList = inputs.Items.itemList1;
                Object itemTypeObject = itemList[i][2];
                String itemTypeString = itemTypeObject.toString();
                if (itemTypeString.equals("BOOK") || itemTypeString.equals("FOOD") || itemTypeString.equals("MEDICAL")) {
                    System.out.println("1 " + itemList[i][0] + ": " + itemList[i][1]);
                } else if (itemTypeString.equals("IMPORTED_FOOD") || itemTypeString.equals("IMPORTED_OTHER")) {
                    Object itemPriceObject = itemList[i][1];
                    itemPriceString = itemPriceObject.toString();
                    CalculateImportTax.calculateImportTax();
                    System.out.println("1 " + itemList[i][0] + ": " + CalculateImportTax.price);
                } else {
                    Object itemPriceObject = itemList[i][1];
                    itemPriceString = itemPriceObject.toString();
                    CalculateSalesTax.calculateTax();
                    System.out.println("1 " + itemList[i][0] + ": " + CalculateSalesTax.price);
                }
            }
        }
    }
}

Спасибо.

Что вам мешает? В чем и где твоя проблема?

M.Dan 18.12.2018 20:07

Я не уверен, как заставить его автоматически менять имена при каждом проходе цикла.

Christopher 18.12.2018 20:10

вы не можете динамически изменять имена членов класса

Chris Rollins 18.12.2018 20:11

что бы вы сделали в этих обстоятельствах? Мне нужно иметь возможность хранить информацию об объекте, такую ​​как его стоимость и имя, и получать эту информацию.

Christopher 18.12.2018 20:12

Если вам действительно нужно иметь возможность динамически изменять имена вещей, вы можете использовать класс HashMap. docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

Chris Rollins 18.12.2018 20:13

Стоит ли делать их динамическими, или я должен просто сделать три отдельных метода для каждого itemList.

Christopher 18.12.2018 20:14

Думаю, в этом случае лучше было бы написать 3 отдельных цикла.

Chris Rollins 18.12.2018 20:22

Что не работает с вашим текущим кодом? Вам не надо нужно изменить объявления. Сосредоточьтесь на реальной проблеме.

user1803551 18.12.2018 21:39
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
8
79
1

Ответы 1

Вот для чего нужны методы. В общих чертах и ​​с плохо подобранным наименованием методов (!)

    private void doOneList(Object[][] itemList) {
        for (int j=1; j<4; j++) {
           ... do stuff with itemList ...
        }
     }

а потом в main

    doOneList(itemList1);
    doOneList(itemList2);
    doOneList(itemList3);

Я подчеркиваю свой комментарий, что это не готовое решение, это просто набросок того, как действовать.

Как бы то ни было, я бы определил более конкретный тип, чем массивы Object. Что-то типа:

 static class Item {
     String description;
     Double tax;
     String type;
 }

а затем используйте одномерный Item []

Другие вопросы по теме