驱动类怎么做(数组)

时间:2015-12-03 09:25:55

标签: java arrays

我正在尝试使用对象的数组列表创建一个驱动程序类,它需要我:

  • 阅读用户的书名
  • 从用户那里阅读书籍
  • 从用户那里阅读库存数量
  • 程序应继续从用户读取书籍信息,直到用户对所有字段的所有条目都为空或零。
  • 程序会将有效的书籍对象存储到ArrayList(仅限有效的对象)
  • 然后,您的程序将按照与输入图书相反的顺序打印用户输入的所有“有效”图书清单。
  • 当用户输入信息时,程序应提供反馈,例如报告项目已添加到ArrayList,或报告发现的任何错误。
  • 包含无效条目的图书未添加到ArrayList中,因此在打印ArrayList时不会打印它们

这是我目前为我的驱动程序的当前代码:(我有点新手这样) 编辑:给出答案

这是我现在得到的

<i class="fa fa-times"></i>

错误现在已经避免,但它没有使用我的异常和书籍类似乎

这是我的类和我将使用新驱动程序类

运行的异常

-----类

 import java.io.*;
 import java.util.*;

public class Bookstore2{
 
    
        
   public static void main(String arg[ ]) throws Exception{
   
      Scanner sc = new Scanner(System.in);
      int isbn=0;
      int quantity = 0;
      String title = "";
      Book oneBook;
      List<Book> bookList = new ArrayList<Book>(); //here  
    
     while(true){
    System.out.print("Enter title: ");
    title = sc.nextLine( );
    sc = new Scanner(System.in);
    System.out.println();
    System.out.print("Enter isbn: ");
    isbn = sc.nextInt( );
    sc = new Scanner(System.in);
    System.out.println();
    System.out.print("Enter quantity: ");
    quantity = sc.nextInt( );
    sc = new Scanner(System.in);
    sc = new Scanner(System.in);
    System.out.println();   

 // WRITE YOUR VALIDATION CODE HERE 
 // Change condition according to your requirements.
    if(isbn !=0 && quantity != 0 && title != null && title != "")
    {
        oneBook = new Book(title, isbn, quantity);
    bookList.add(oneBook); //create a list in main
    System.out.println("Book added in the list."); 
    }
    else 
    {
        System.out.println("Book not added");
         break;
       }

}
  for(int i = bookList.size()-1; i >= 0; i--){
    System.out.println(bookList.get(i));
    }   
    }  //main method
}   //class

------异常类

public class Book{
//instance variables
private String title = "";
private int isbn;
private int quantity;

public Book (String title, int isbn, int quantity)throws BookException{     
//constructors

     setTitle(title);
     setIsbn(isbn);
     setQuantity(quantity);

   }
public String toString( ){ //toString Method

    String s = "";
    s = s + "Title: " + this.title + "\nISBN: " + this.isbn +   "\nQuantity: " + this.quantity + "\n";
    return s;

    }

public String getTitle( ){
    return this.title;
    }
public int getisbn( ){
    return this.isbn;
    }
public int getquantity( ){  
    return this.quantity;
    }

//mutator methods
public void setTitle(String newtitle )throws BookException{
    if(newtitle.length()<1){
    BookException be = new BookException( );
    be.setMessage("Title cannot be blank");
    throw be;
    }
    else{
    this.title=newtitle;
    }
}

public void setIsbn(int newisbn)throws BookException{
    if (isbn <= 1000 || isbn >= 10000) {
    this.isbn = newisbn;
    }
    else{
    BookException be = new BookException( );
    be.setMessage("ISBN should be between 1000 and 10000.");
    throw be;
    }
}

public void setQuantity(int newquantity)throws BookException{
   if(newquantity>=0){
   this.quantity = newquantity;
    }
   else{
    BookException be = new BookException( );
    be.setMessage("Quantity can't be a negative number.");
    throw be;
     }
  }

}

3 个答案:

答案 0 :(得分:2)

首先使用:while(true)循环迭代,直到用户为所有字段输入0。

while(true)
{
   // Scanner Code i.e. read input from the user.
   if(//check all the inputs)
   {
       //create a new book and insert it into array list
   }
   else
   {
     // If input is 0, break from the loop
   }
}

其次,永远不要在bean类中执行验证。创建一个单独的类或方法来验证输入。之后,仅输入验证然后创建一个新对象。

希望这会对你有所帮助。

正确的代码:

     sc = new Scanner(System.in);
    while(true){
    System.out.print("Enter title: ");
    title = sc.nextLine( );
           System.out.println();
    System.out.print("Enter isbn: ");
    isbn = sc.nextInt( );
    System.out.println();
    System.out.print("Enter quantity: ");
    quantity = sc.nextInt( );
    System.out.println();   

 // WRITE YOUR VALIDATION CODE HERE 
 // Change condition according to your requirements.
    if(isbn !=0 && quantity != 0 && title != null && title != "")
    {
        oneBook = new Book(title, isbn, quantity);
    bookList.add(oneBook); //create a list in main
    System.out.println("Book added in the list."); 
    }
    else 
    {
        System.out.println("Book not added");
         break;
       }

}
  for(int i = bookList.size()-1; i >= 0; i--){
    System.out.println(bookList.get(i));
    }

答案 1 :(得分:0)

你发布了:

while(title != null || title.equals("0") || isbn != null || isbn != 0 || quantity

isbn是int类型,即原始类型我们如何将它与null进行比较。 数量也是int类型。 int(例如,基本类型)的默认值为0.并且,基本类型永远不能与null进行比较。

答案 2 :(得分:0)

由于代码存在很多混淆,因此以下是该任务的完整解决方案:

<强> Bookstore.java

public class Bookstore {
    static final Scanner in = new Scanner(System.in);
    static List<Book> books = new ArrayList<>();

    public static void main(String arg[]) throws Exception {
        while (true) {
            // read book information
            Book book = new Book();
            System.out.print("Enter title: ");
            book.title = in.nextLine();
            System.out.println();

            System.out.print("Enter ISBN: ");
            book.isbn = readInt();
            System.out.println();

            System.out.print("Enter quantity: ");
            book.quantity = readInt();
            System.out.println();

            // exit condition: "blank book" entered
            if (book.title.isEmpty() && book.isbn == 0 && book.quantity == 0) {
                System.out.println("Goodbye!");
                break;
            }

            //validate and add book
            try {
                validateBook(book);
                books.add(book);
                System.out.println("Book successfully added to the list.");
            } catch (IllegalStateException ex) {
                System.err.println("Book is not valid: " + ex.getMessage());
                continue;
            }

            // print book list
            for (int i = books.size() - 1; i >= 0; i--) {
                System.out.println(books.get(i));
                System.out.println();
            }
        }
    }

    static int readInt() {
        while (true) {
            String input = in.nextLine();
            if(input.isEmpty()) {
                return 0;
            }
            try {
                return Integer.parseInt(input);
            } catch (NumberFormatException ex) {
                System.err.println("Expected a valid integer: " + input);
            }
        }
    }

    static void validateBook(Book book) {
        if (book.title == null || book.title.isEmpty()) {
            throw new IllegalStateException("Book title must not be blank.");
        }
        if (book.isbn < 1000 || book.isbn > 10000) {
            throw new IllegalStateException("Book ISBN must be between 1000 and 10000.");
        }
        if (book.quantity < 0) {
            throw new IllegalStateException("Book quantity must be positive.");
        }
    }
}

<强> Book.java

public class Book {
    public String title;
    public int isbn;
    public int quantity;

    @Override
    public String toString() {
        return String.join("\n",
                "Title: " + title,
                "ISBN: " + isbn,
                "Quantity: " + quantity
        );
    }
}