Я новичок в 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);
}
}
}
}
}
Спасибо.
Я не уверен, как заставить его автоматически менять имена при каждом проходе цикла.
вы не можете динамически изменять имена членов класса
что бы вы сделали в этих обстоятельствах? Мне нужно иметь возможность хранить информацию об объекте, такую как его стоимость и имя, и получать эту информацию.
Если вам действительно нужно иметь возможность динамически изменять имена вещей, вы можете использовать класс HashMap. docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
Стоит ли делать их динамическими, или я должен просто сделать три отдельных метода для каждого itemList.
Думаю, в этом случае лучше было бы написать 3 отдельных цикла.
Что не работает с вашим текущим кодом? Вам не надо нужно изменить объявления. Сосредоточьтесь на реальной проблеме.
Вот для чего нужны методы. В общих чертах и с плохо подобранным наименованием методов (!)
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 []
Что вам мешает? В чем и где твоя проблема?