я изменил ваш код для класса ShopCLI
package tester;
import java.util.ArrayList;
import java.util.Scanner;
public class ShopCLI {
public static void main(String[] args) {
ArrayList<Order> ord = new ArrayList<>();
int orderNumber =1;
System.out.println("Welcome to Sandwich Shop CLI V1!");
System.out.println("start order");
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("Press 1 for new order or 2 to Exit");
int choice = sc.nextInt();
if (choice == 1){
System.out.println("Enter outer Options:Outer Options are Bun, Bread or Brioche");
String inputOuter = sc.next();
System.out.println("Enter inner Options:Inner Options are Ham, Cheese or Cucumber");
String inputInner = sc.next();
System.out.println("Enter sauce Options:Sauce Options are Mayo, Butter or Marmite");
String inputSauce = sc.next();
Order order1 = new Order(orderNumber, inputOuter, inputInner, inputSauce, 0);
order1.setOrder(inputOuter, inputInner, inputSauce);
System.out.println("You Made a " + inputInner + " with " + inputSauce + " Sandwich on " + inputOuter);
System.out.println("This Will Cost " + order1.getCost());
ord.add(order1);
}
else if (choice == 2){
System.out.println("Exited.");
System.exit(1);
}
}
}
}
, а формат setOrder
также изменен public void setOrder(String repOuter, String repInner, String repSauce)
Вы можете использовать длины значений в каждом ключе и в самом словаре для достижения желаемого результата, используя следующее:
r = {1:['1', '2', '3'], 2:['1', '2', '3'], 3:['1', '2', '3', '4', '5']}
d = {2: 2, 1: 4, 3: 1}
for k,v in d.items():
if k < len(r) and v < len(r[k]):
print(r[k][v])
Вы можете индексировать напрямую, обрабатывая исключения соответствующим образом:
for k, v in d.items():
try:
print(r[k][v])
except (KeyError, IndexError):
pass
# 3
# 2
KeyError
может быть вызвано, если первый индексатор k
не является ключом словаря. IndexError
может быть увеличено, если второй индексатор v
слишком велик, учитывая значение списка словаря. Вы должны тщательно определить, какие ошибки нужно фиксировать и как ими управлять.