2015-12-13 2 views
1

Я создаю 3 вещи прямо сейчас; драйвер, класс и исключение.My Exception не работает

В настоящее время возникают проблемы с моим классом книжного магазина, признающим исключения в моем классе книг.

Что я делаю неправильно?

Driver: под редакцией данного предложения по @Satoshi Kouno

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

 
public class BookStore{ 
 
    
 
    
 
     
 
    public static void main(String arg[ ]) throws Exception{ 
 
    
 
     Scanner sc = new Scanner(System.in); 
 
     int isbn=0; 
 
     int quantity = 0; 
 
     String title = ""; 
 
     Book oneBook; 
 
     boolean exit = false; 
 
     List<Book> bookList = new ArrayList<Book>(); //here 
 
    
 
    while(true){ 
 
    try{ 
 
    sc = new Scanner(System.in); 
 
    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(); 
 

 
// Validation Codes 
 
// Condition 
 
    if(isbn !=0 && quantity != 0 && !"".equals(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; 
 
     } 
 
    } 
 
     
 
    catch(InputMismatchException ime){ 
 
     System.out.println("you did not enter a number"); 
 
    } 
 
    catch (BookException be){ 
 
     System.out.println(be.getMessage()); // 
 
} 
 
} 
 
    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 Exception{  
//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; 
    } 
    } 

} 

И мой класс исключения: отредактирован # 2

public class BookException extends Exception { 
//instance variable 
private String message = ""; 

public BookException(String message) { 
    super(message); 
} 

public void setMessage(String newMessage) { 
    this.message = newMessage; 
} 

public String getMessage() { 
    return this.message; 
} 

} Попытка заставить мой класс работать с моим драйвером, но он не работает.

EDIT !! PSA я забыл указать требования моего класса драйвера

  • Прочитайте название книги от пользователя
  • Читать книгу ISBN от пользователя
  • Прочитайте книгу в складе количестве от пользователя
  • Ваша программа должна продолжать читать информацию о книге от пользователя до тех пор, пока все записи от пользователя для всех полей не будут пустыми или нулевыми.
  • Ваша программа будет хранить действительные объекты книги в ArrayList (только действительные объекты)
  • Ваша программа затем распечатает список всех «действительных» книг, введенных пользователем в обратном порядке, в котором были введены книги.
  • Когда пользователь вводит информацию, программа должна давать обратную связь, например, сообщать, что элемент был добавлен в ArrayList или сообщается о найденных ошибках.

мои книги и класс исключения не нужны изменения уже

они просто хотят, чтобы я сделал свой собственный драйвер для работы с ними обоими и их исключения

+1

Что делать вы подразумеваете «признание исключений»? –

+1

У вас не должно быть сеттера для сообщения: передайте сообщение как параметр конструктора, чтобы вы написали 'throw new BookException (« Quantity ... »)'; вы вызываете 'super (message)' в свой конструктор, который теперь принимает параметр String. –

+0

Вы выбрали это исключение из метода setTitle, но я не вижу никаких вызовов. Я пропустил это? – duffymo

ответ

3

Ваш класс не работает причитать это :

// Validation Codes 
// Condition 
if(isbn !=0 && quantity != 0 && title != null && title != "") 

title != "" 

Это условие не будет никогда и никогда не проверяется так не будет входить в той части кода, на котором создается Book объект:

Для сравнения значений строк просто заменить его:

!"".equals(title); 

@seeString#equals() JavaDOC

или использовать классы апач Ланг (вероятно, вам придется импортировать):

StringUtils.isNotEmpty(title); 

Кроме того:

Я предлагаю вам изменить свой собственный класс исключений, добавив конструкцию:

public class BookException extends Exception { 

    public BookException(String message) { 
     super(message); 
    } 

} 

И в Book#setTitle и другой сеттеры поднять его:

throw new BookException("Title cannot be blank!"); 

Надежда эта помощь.

Update:

Анализ кода я проверил другие вещи, как:

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

Эта проверка является неправильным для меня, наверное, вы хотели бы сделать это:

isbn >= 1000 && isbn <= 10000 
+0

Прошу прощения в первой части о том, как я должен помещать коды, как мне это заменить? редактирование кода или показ мне измененного было бы полезно; _; ,,, – aldz24

+0

@ aldz24 Ответьте на обновления, проверьте первые строки! –

+0

Я просто хочу, чтобы «Название не могло быть пустым», ISBN должно быть от 1000 до 10000, а количество не может быть отрицательным числом. из моего книжного класса; _; но я не знаю, что мне нужно делать много, на самом деле не очень хорошо, поэтому я извиняюсь – aldz24