再次调用方法后出错(arrayList库程序)

时间:2016-04-07 14:19:11

标签: java arraylist

package bookShop;

import java.util.ArrayList;
import java.util.Scanner;

/**
 * Created by luigi on 4/1/2016.
 */
public class Book{

    private String bTitle;
    private Double bPrice;
    private int bYear;
    private int bStock;

    private String mTitle;
    private Double mPrice;
    private int mYear;
    private int mWeek;

    private int pick;

    static ArrayList<Book> BookList = new ArrayList<Book>();

    static Scanner input = new Scanner(System.in);
    static Scanner pickInput = new Scanner(System.in);
    static Scanner pickBook = new Scanner(System.in);

    public void createBook(){
        System.out.println("Enter a Title: ");
        bTitle = input.nextLine();

        System.out.println("Enter the Price: ");
        bPrice = input.nextDouble();

        System.out.println("Enter the publication Year: ");
        bYear = input.nextInt();

        System.out.println("Enter the amount of stock: ");
        bStock = input.nextInt();
    }

    public void addBook(){
        Book newBook = new Book();
        newBook.createBook();
        BookList.add(newBook);
    }

    public void printMenu() {
        System.out.println("Welcome to your personal Book-Shop library program.");
        System.out.println("Type the number of the menu you want to use.");
        System.out.println("1: Check the books in the list.");
        System.out.println("2: Add a book to the list");
        System.out.println("3: Delete stock.");
        System.out.println("0: Exit the menu.");
        pick = pickInput.nextInt();
    }

    public void deleteStock(){
        printBookList();
        System.out.println("Type the index of the book you want to remove: ");
        int stockChoice = (pickBook.nextInt()-1);
        BookList.remove(stockChoice);

        //BookList.remove(stockChoice);
        System.out.println("You have chosen to delete the following book: "+(stockChoice+1));


    }

    public String printBook(){
        String BookInfo =   " "+
                "\n Title: "+bTitle+
                "\n Price: "+bPrice+
                "\n Year: "+bYear+
                "\n Stock: "+bStock+
                " ";
        return BookInfo;
    }

    public void printBookList(){
        for(int i=0;i<BookList.size();i++){
            System.out.printf("\n Book Number: [%s]   \n",i+1);         //***
            System.out.println(BookList.get(i).printBook());
        }
    }


    public void run(){
        printMenu();

        switch(pick){
            case 1:
                printBookList();
                run();
                break;

            case 2:
                addBook();
                run();
                break;

            case 3:
                deleteStock();
                run();
                break;


            case 0:
                System.out.println("Shutting down.");
                break;


        }

    }

    public static void main(String[] args) {
        Book newBook = new Book();
        newBook.run();
    }


}

这是我的代码,当我调用addBook()时,我无法添加标题;在添加第一本书后第二次。

欢迎来到您的个人书店图书馆计划。 输入要使用的菜单编号。 1:检查列表中的书籍。 2:将书籍添加到列表中 3:删除股票。 0:退出菜单。 1 欢迎来到您的个人书店图书馆计划。 输入要使用的菜单编号。 1:检查列表中的书籍。 2:将书籍添加到列表中 3:删除股票。 0:退出菜单。 2 输入标题: 输入价格: 123 输入出版年份: 123 输入库存量: 5

2 个答案:

答案 0 :(得分:0)

更改您的

bTitle = input.nextLine(); to bTitle = input.next();.

这是因为您的stock方法的nextInt不会消耗您输入的最后一个换行符,因此在下一次调用标题时会使用该换行符。它假定输入已经以下一行的形式进行,因此它会转到下一个输入的价格。

答案 1 :(得分:0)

printBook()以外的所有方法都应该是静态的,因为它们与特定的书没有关联,createBook()的内容应该在Book的构造函数中,createBook()应该被删除, run不应该调用自己,因为如果用户提供输入太多次,这将导致StackOverflowError,而是使用System.exit(0);来关闭程序,其内容应该是无限循环,run()的新内容1}}应该在printMenu()的末尾,并且应该删除run,将修改后的printMenu()中的所有内容移动到循环中,最后printMenu()只能从{{1}调用一次}。另外,对于您的问题,请回答学习阶段的答案,以及我对您未来问题的回答