我有这个问题,我可以使用我可以在我正在设计的这个商店系统中操作的对象填充LinkedList。问题是当我用多个Object填充列表然后在List中搜索该对象时;我的程序将告诉我,即使我可以列出列表的内容,它将显示我正在寻找的对象。
任何帮助都将不胜感激。
import java.io.*;
import java.util.*;
public class Sales extends addVideoGame implements java.io.Serializable{
private static LinkedList<VideoGames> sellGame = new LinkedList<>();
private static String searchTerm;
private static int searchQ;
public static void sellItem(){
sellGame = games;
int listLength = sellGame.size();
searchTerm = IBIO.inputString("What item would you like to sell: ");
for(VideoGames v : sellGame){
if(v.getTitle().contains(searchTerm)){
IBIO.output("Item found: " + searchTerm);
searchQ = v.getQuantity();
IBIO.output("Available Quantity: " + searchQ);
int sellQ = IBIO.inputInt("How much of this item would you like to sell: ");
if(sellQ > searchQ){
IBIO.output("The amount you have specified is greater than the \ncurrent stock.");
sellItem();
} else {
searchQ = searchQ - sellQ;
v.setQuantity(searchQ);
double sellP;
sellP = sellQ * v.getPrice();
IBIO.output("£"+sellP);
String confirm = IBIO.input("This is the price you are selling these items for. Type 'Yes' to complete the order or 'No' to reject it. ");
if(confirm.equalsIgnoreCase("Yes")){
IBIO.output("Order complete!");
try{
int receiptCount = 0;
PrintWriter receipt = new PrintWriter("C:\\Users\\Yemi\\Desktop\\TheStore\\receipt"+ receiptCount +".txt");
receipt.println("Item sold: " + v.getTitle());
receipt.println("Quantity sold: " + sellQ);
receipt.close();
receiptCount = receiptCount + 1;
IBIO.output("Receipt saved to: C:\\Users\\Yemi\\Desktop\\TheStore");
} catch(IOException io){
io.printStackTrace();
}
IBIO.output("Thank you for buying from Gamers Avenue UK!");
} else if(confirm.equalsIgnoreCase("No") && TheStore.privilege){
AccessMenus.adminMenu();
} else {
AccessMenus.userMenu();
}
if(TheStore.privilege){
AccessMenus.adminMenu();
} else {
AccessMenus.userMenu();
}
}
} else {
IBIO.output("The item you are looking for does not exist.");
sellItem();
}
}
}
}
如果有人需要,以下是用于导航程序的类:
public class TheStore {
static String password; //Variable created to hold and check the value of password against the correct value.
public static boolean privilege = false; //Variable created to distinguish the difference between a normal user and a user with administrator privileges.
public static void main(String[] args) {
IBIO.output("Welcome to Gamers Avenue UK!");
IBIO.output("Please make sure that you enter the correct password for your given privileges.");
password = IBIO.inputString("Enter password: ");
if(password.equalsIgnoreCase("admin")){ //Checks the entered value against the correct value.
privilege = true; //Sets global boolean value to true, so that admin access is granted.
IBIO.output(" ");
AccessMenus.adminMenu();//If password is correct, loads admin menu.
} else if(password.equalsIgnoreCase("user")){
privilege = false; //Keeps admin access off, so that unauthorised changes cannot be made.
IBIO.output(" ");
AccessMenus.userMenu();//If correct, loads user menu.
} else {
IBIO.output("The password is incorrect. Exiting program.");
System.exit(1); //If an incorrect password is entered, the program will close.
} //close else
}//close main
}//close class TheStore
访问菜单:
public class AccessMenus{
public static int choice;//Variable which will hold the value, which corresponds to an action depending on what value is entered.
public AccessMenus(){ //Null argument constructor, to set values to 0.
AccessMenus.choice = 0;
}
public AccessMenus(int c){ //Single argument constructor.
AccessMenus.choice = c;
}
public static void userMenu(){
IBIO.output("1: Sell a product.");
IBIO.output("2: Register a customer in the Loyalty programme.");
IBIO.output("3: Stock check.");
IBIO.output("4: Log out.");
IBIO.output(" ");
IBIO.output("Please make your choice: ");
choice = IBIO.inputInt();
if(choice == 1){
Sales.sellItem();
} else if(choice == 2){
CustomerRandom.customerMenu();
} else if(choice == 3){
StockCheck.checkStock();
} else if(choice == 4){
IBIO.output("Logging out.");
System.exit(1);
} else {
IBIO.output("Invalid choice. Returning to menu.");
userMenu(); //If the value entered does not correspond to any action, the program will treat it as invalid and return to the menu.
}//close else
}//close userMenu
public static void adminMenu(){
IBIO.output("1: Sell a product.");
IBIO.output("2: Go the Videogame management menu.");
IBIO.output("3: Stock check.");
IBIO.output("4: Register a customer in the Loyalty programme.");
IBIO.output("5: Log out.");
IBIO.output(" ");
IBIO.output("Please make your choice: ");
choice = IBIO.inputInt();
if(choice == 1){
Sales.sellItem();
} else if(choice == 2){
addVideoGame.vgMenu();
}else if(choice == 3){
StockCheck.checkStock();
} else if(choice == 4){
CustomerRandom.customerMenu();
} else if(choice == 5){
IBIO.output("Logging out.");
System.exit(1);
} else {
IBIO.output("Invalid input. Returning to menu.");
adminMenu();
} //end else
}//close AdminMenu
}//close AccessMenus
此类是必需的,因为它允许您填充列表:
import java.util.*;
import java.io.*;
public class addVideoGame extends VideoGames implements java.io.Serializable{
public static VideoGames game = new VideoGames();
public static VideoGames eGame = new VideoGames();
public static LinkedList <VideoGames> games = new LinkedList<>();
public static LinkedList <VideoGames> loadList = new LinkedList<>();
private static int vgChoice = 0;
public static int vgCount = 0;
public static int vgAmount = 0;
public static void vgMenu(){
IBIO.output("WARNING: USING OPTION 4 TO LOAD IN A LOCAL FILE WILL ERASE EVERYTHING CONTAINED IN THE CURRENT LIST. \nSave everything in the current list using option 3 before loading in data.");
IBIO.output("1: Add a new videogame to the list.");
IBIO.output("2: View the contents of the list.");
IBIO.output("3: Save the contents of the list to the local area.");
IBIO.output("4: Load in data from a local file.");
IBIO.output("5: Return to the main menu.");
vgChoice = IBIO.inputInt("Make your choice: ");
if(vgChoice == 1){
vgAmount = IBIO.inputInt("How many games would you like to add to the database?: ");
for(int x = 0; x < vgAmount; x = x + 1){
VideoGames vg = new VideoGames();
vg.setTitle(IBIO.inputString("Enter the title of the game: "));
vg.setPublisher(IBIO.inputString("Enter the publisher of the game: "));
vg.setDeveloper(IBIO.inputString("Enter the developer of the game: "));
vg.setAgeRating(IBIO.inputInt("Enter the age rating of the game: "));
vg.setGenre(IBIO.inputString("Enter the genre of the game: "));
vg.setQuantity(IBIO.inputInt("Enter the available quantity of the game: "));
vg.setPrice(IBIO.inputDouble("Enter the recommended retail price: "));
game = vg;
games.add(vg);
IBIO.output(" ");
}
vgMenu();
} else if(vgChoice == 2){
IBIO.output("Current amount of games in the list: " + games.size());
Iterator itr = games.iterator();
while(itr.hasNext()){
Object g = itr.next();
IBIO.output(g + " ");
}
//System.out.println(Arrays.toString(games.toArray()));
vgMenu();
} else if(vgChoice == 3){
try{
ListIterator output = games.listIterator();
while(output.hasNext()){
Object o = output.next();
FileOutputStream fileOut = new FileOutputStream("C:\\Users\\Yemi\\Desktop\\TheStore\\games.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(game);
out.close();
fileOut.close();
IBIO.output("Data saved to C:\\Users\\Yemi\\Desktop\\TheStore\\games.ser");
}
} catch(IOException io){
io.printStackTrace();
}
vgMenu();
} else if(vgChoice == 4){
eGame = null;
try{
ListIterator input = games.listIterator();
while(input.hasNext()){
Object i = input.next();
FileInputStream fileIn = new FileInputStream("C:\\Users\\Yemi\\Desktop\\TheStore\\games.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
eGame = (VideoGames) in.readObject();
in.close();
fileIn.close();
games.clear();
games.add(eGame);
IBIO.output("Item added to list from local file.");
}
} catch (IOException i){
i.printStackTrace();
return;
} catch(ClassNotFoundException c){
IBIO.output("VideoGames class not found");
c.printStackTrace();;
return;
}
vgMenu();
} else if(vgChoice == 5){
IBIO.output("Returning to main menu: ");
AccessMenus.adminMenu();
}
}
}
再次,非常感谢任何帮助!
答案 0 :(得分:0)
我想这个错误是else
- sellItem()
内部循环内部导致的。
试试这个(虽然我认为你应该删除对最终if {}内的sellItem()
的调用:
import java.io.*;
import java.util.*;
public class Sales extends addVideoGame implements java.io.Serializable{
private static LinkedList<VideoGames> sellGame = new LinkedList<>();
private static String searchTerm;
private static int searchQ;
public static void sellItem(){
sellGame = games;
int listLength = sellGame.size();
searchTerm = IBIO.inputString("What item would you like to sell: ");
boolean foundItem = false;
for(VideoGames v : sellGame){
if(v.getTitle().contains(searchTerm)){
foundItem = true;
IBIO.output("Item found: " + searchTerm);
searchQ = v.getQuantity();
IBIO.output("Available Quantity: " + searchQ);
int sellQ = IBIO.inputInt("How much of this item would you like to sell: ");
if(sellQ > searchQ){
IBIO.output("The amount you have specified is greater than the \ncurrent stock.");
sellItem();
} else {
searchQ = searchQ - sellQ;
v.setQuantity(searchQ);
double sellP;
sellP = sellQ * v.getPrice();
IBIO.output("£"+sellP);
String confirm = IBIO.input("This is the price you are selling these items for. Type 'Yes' to complete the order or 'No' to reject it. ");
if(confirm.equalsIgnoreCase("Yes")){
IBIO.output("Order complete!");
try{
int receiptCount = 0;
PrintWriter receipt = new PrintWriter("C:\\Users\\Yemi\\Desktop\\TheStore\\receipt"+ receiptCount +".txt");
receipt.println("Item sold: " + v.getTitle());
receipt.println("Quantity sold: " + sellQ);
receipt.close();
receiptCount = receiptCount + 1;
IBIO.output("Receipt saved to: C:\\Users\\Yemi\\Desktop\\TheStore");
} catch(IOException io){
io.printStackTrace();
}
IBIO.output("Thank you for buying from Gamers Avenue UK!");
} else if(confirm.equalsIgnoreCase("No") && TheStore.privilege){
AccessMenus.adminMenu();
} else {
AccessMenus.userMenu();
}
if(TheStore.privilege){
AccessMenus.adminMenu();
} else {
AccessMenus.userMenu();
}
}
break;
}
}
if(!foundItem) {
IBIO.output("The item you are looking for does not exist.");
sellItem();
}
}
}
虽然这可行,但我通常建议将searchTerm
转换为函数的参数,将searchQ
转换为函数的返回值。这样做会增加并发进程之间的隔离,并阐明正确执行函数所需的参数。