Эта программа может показаться слишком сложной для простой задачи, но это упрощенная
версия моей более сложной программы, потому что у меня очень специфическая проблема.
Так что, если я введу команды:
ADD // Команда «ADD», добавляет телефоны в список массивов в классе PhoneShop
DISPLAY // Команда «DISPLAY», затем появятся следующие строки, которые являются правильными
0 Samsung
1 Google
2 Sony
3 LG
4 iPhone
КУПИТЬ 0 // Команда "КУПИТЬ# ", означает купить телефон по #-му индексу списка массивов
DISPLAY // Команда" DISPLAY ", тогда появятся следующие строки, которые являются правильными
0 Google
1 Sony
2 LG
3 iPhone
RETURN // Команда «RETURN», возвращает последний купленный телефон в конец списка массивов
DISPLAY // Команда «DISPLAY», затем появятся следующие строки, последняя строка неверна
0 Google
1 Sony
2 LG
3 iPhone
4 Google
Я хочу, чтобы последняя строка вывода была последним приобретенным телефоном.Таким образом, ожидаемое будет:
0 Google
1 Sony
2 LG
3 iPhone
4 Samsung
Я думаю, что моя проблема в том, что я возвращаю 0-й индекс нового списка массивов (после покупки телефона).Я хочу вернуть 0-й индекс старого списка массивов (до покупки телефона).
У меня также есть другая проблема, когда, если возвращаемая команда вводится 2 раза подряд, например, моя программавернет «последний купленный телефон» дважды.Чтобы это исправить, я знаю, что мне нужно обновить нулевую переменную, купленную в прошлом телефоне, на ноль, но я не совсем уверен, чтобы это реализовать.Например, это может произойти:
ADD
BUY 0
RETURN
RETURN
DISPLAY
0 Google
1 Sony
2 LG
3 iPhone
4 Google
5 Google
PhoneShopSimulator Class:
import java.util.ArrayList;
import java.util.Scanner;
public class PhoneShopSimulator
{
public static void main(String[] args)
{
PhoneShop shop = new PhoneShop();
ArrayList<Phone> phones = new ArrayList<Phone>();
int index = 0;
phones.add(new Phone("Samsung"));
phones.add(new Phone("Google"));
phones.add(new Phone("Sony"));
phones.add(new Phone("LG"));
phones.add(new Phone("iPhone"));
Scanner input = new Scanner(System.in);
while (input.hasNextLine())
{
String line = input.nextLine();
Scanner commandLine = new Scanner(line);
String word = commandLine.next();
if (word.equals("QUIT"))
{
return;
}
else if (word.equals("DISPLAY"))
{
shop.displayInventory();
}
else if (word.equals("ADD"))
{
shop.addPhones(phones);
}
else if (word.equals("BUY"))
{
index = Integer.parseInt(commandLine.next());
shop.buyPhone(index);
}
else if (word.equals("RETURN"))
{
shop.returnPhone(shop.getObjectPhone(index));
}
else
{
System.out.println("Invalid Command");
}
commandLine.close();
}
input.close();
}
}
Класс PhoneShop:
import java.util.ArrayList;
public class PhoneShop
{
private Phone p;
private ArrayList<Phone> phones;
public PhoneShop()
{
ArrayList<Phone> array = new ArrayList<Phone>();
phones = array;
}
public Phone getObjectPhone(int index)
{
p = phones.get(index);
return p;
}
public void addPhones(ArrayList<Phone> newPhones)
{
phones.addAll(newPhones);
}
public ArrayList<Phone> getPhones()
{
return phones;
}
public Phone buyPhone(int index)
{
if (index >= 0 && index < phones.size())
{
p = phones.remove(index);
return p;
}
return null;
}
public Phone returnPhone(Phone p)
{
if (p != null)
{
phones.add(p);
}
return null;
}
public void displayInventory()
{
for (int i = 0; i < phones.size(); i++)
{
Phone referenceP = new Phone(phones.get(i).getModel());
System.out.println(i + " " + referenceP.display());
}
}
}
Класс телефона:
public class Phone
{
private String model;
public Phone(String model)
{
this.model = model;
}
public String getModel()
{
return model;
}
public String display()
{
return model;
}
}