对于一个简单的任务,该程序似乎过于复杂,但这是简化的
版本较复杂的程序,因为我遇到了一个非常具体的问题。
所以,如果我输入命令:
ADD //命令“ ADD”,将电话添加到类PhoneShop中的阵列列表中
DISPLAY //命令“ DISPLAY”,然后将出现下一行,这是正确的
0三星
1个Google
2索尼
3 LG
4部iPhone
购买0 //命令“购买#”,表示在阵列列表的第#个索引处购买电话
DISPLAY //命令“ DISPLAY”,然后将出现下一行,这是正确的
0个Google
1索尼
2 LG
3个iPhone
RETURN //命令“ RETURN”,将最后购买的手机返回到阵列列表的末尾
DISPLAY //命令“ DISPLAY”,然后将出现下一行,最后一行不正确
0个Google
1索尼
2 LG
3个iPhone
4个Google
我想要的是最后一条输出线是最后购买的电话。因此预期是:
0个Google
1索尼
2 LG
3个iPhone
4个三星
我认为我的问题是我要返回新阵列列表的第0个索引(在购买电话之后)。我想返回旧数组列表的第0个索引(在购买手机之前)。
我还有另一个问题,例如,如果连续两次输入返回的命令,则我的程序将两次返回“最后购买的手机”。为了解决这个问题,我知道我应该将上次购买的手机参考变量更新为null,但是我不确定要实现该变量。因此,例如,会发生这种情况:
添加
购买0
返回
返回
显示
0个Google
1索尼
2 LG
3个iPhone
4个Google
5个Google
PhoneShopSimulator类:
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;
}
}