Как получить правильный ввод, чтобы получить индекс моего ArrayList? - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь получить индекс моего ArrayList через indexOf. Пока у меня есть

Мой ArrayList: public static ArrayList<Shop> allShops = new ArrayList();

То, что должно получить индекс

Scanner editShop = new Scanner(System.in);
String shopToEdit = editShop.nextLine();
int i = allShops.indexOf(shopToEdit);
System.out.println(i); //see what our index is (returns -1 because the var doesn't seem to get the right input)
EditFunc.edit(i);                    

и это, что должно измениться мой массив

public static void edit(int index){
    //change array with given input in edit
    //TODO: Make it so they can choose what to edit
    //with booleans if editTrueName = false and then later on make it true again

    System.out.println("Enter the new shop name:");
    Scanner editedShopAttribute = new Scanner(System.in);
    String editedShopName = editedShopAttribute.nextLine();
    System.out.println("Enter the new shop location:");
    String editedShopLocation = editedShopAttribute.nextLine();
    Shop EditedVar = new Shop();
    EditedVar.createShop(editedShopName,editedShopLocation);
    allShops.set(index, EditedVar);

}    

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

Если с моим кодом что-то не так, я всегда стараюсь сделать его лучше.

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Я не верю, что вы можете заставить то, что вы хотите, работать с массивом. Причина, указанная в одном из комментариев, заключается в том, что вы ищете строку, но массив содержит магазин (ы). Поскольку магазин содержит больше, чем просто имя магазина, вы никогда не сможете найти его таким образом. Вы должны использовать «Карту» для таких целей:

public static Map<String, Shop> allShopsMap = new HashMap<>();

Если вы добавляете все магазины на эту карту, то когда вы получаете ShopName в качестве ввода, вам просто нужно сделать:

Shop shopToEdit = allShopsMap.get(inputShopName);

, затем вызовите методы set для этого объекта, чтобы изменить имя и местоположение.

0 голосов
/ 21 января 2020

Разве вы не можете сделать это с Map<String, Shop>? Таким образом, вы можете использовать shopName в качестве ключа.

Кстати, когда я вижу вашу новую версию с java и OOP, я настоятельно рекомендую вам прочитать Чистый код Роберта C , Мартин, это книга, меняющая правила игры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...