2013-07-25 2 views
0

Я создаю пакет mylib с классами Library {} и Book {}.Java: конструктор X в классе X не может применяться к заданным типам

класс Библиотека:

package mylib; 
import java.util.*; 

class Library { 
public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 

    Book[] MyBooks = new Book[3]; 
    Book x; 

    MyBooks[0] = new Book("The Lover's Dictionary", "Levithan, D.", 211, "AVAILABLE"); 
    MyBooks[1] = new Book("White Tiger", "Adiga, A.", 304, "AVAILABLE"); 
    MyBooks[2] = new Book("Thirteen R3asons Why", "Asher, J.", 336, "AVAILABLE"); 

    System.out.println("\n***** BOOK LISTING *****"); 
    for(int i = 0; i < MyBooks.length; i++) { 
     x = MyBooks[i]; 
     System.out.println("[" + (i + 1) + "] " + x.sTitle + "\nAuthor: " + 
      x.sAuthor + "\nPages: " + x.iPages + "\nStatus: " + Book.AVAILABLE); 
     System.out.print("\r\n"); 
    } 

    System.out.println("***** SELECT ACTION *****"); 
    System.out.println("B - Borrow a book"); 
    System.out.println("R - Reserve a book"); 
    System.out.println("I - Return a book"); 
    System.out.println("X - Exit program"); 

    System.out.print("\nEnter command: "); 
    char cAction = input.nextLine().charAt(0); // Read single char 

    switch(cAction) { 
     case 'B': 

      break; 

     case 'R': 

      break; 

     case 'I': 

      break; 

     case 'X': 
      Book book = new Book(); 
      book.exitProgram(); 
      break; 

     default: 
      System.out.println("INVALID INPUT!"); 
      break; 
    } 
} 
} 

Книга класса:

package mylib; 

class Book { 
int iPages; 
String sTitle, sAuthor; 
String sBorrowedBy, sReservedBy; 
String sDueDate, sReturnDate; 
    String sStatus; 

public static final String BORROWED = "BORROWED", AVAILABLE = "AVAILABLE", RESERVED = "RESERVED"; 

// Constructor 
public Book(String title, String author, int pages, String status) { 
    this.sTitle = title; 
    this.sAuthor = author; 
    this.iPages = pages; 
    this.sStatus = status; 
} 
/* 
void borrowBook() { 

} 

void reserveBook() { 

} 

void returnBook() { 

} 
*/ 
void exitProgram() { 
    System.exit(0); 
} 
} 

В Library классе, я пытаюсь выйти из программы с помощью переключателя, который вызывает метод exitProgram() из Book класс. Я получаю 1 ошибку constructor x in class x...

Любая помощь будет очень признательна.

ответ

0

Сделать метод выхода статический в Book.java

Book.java 
static void exitProgram() { 
    System.exit(0); 
} 

Library.java 
case 'X': 
     //Book book = new Book(); 
     Book.exitProgram(); 
     break; 
+0

http://pastebin.com/3Hch0Qje - Он компилируется, но все же не выходит, когда я вхожу в X? –

+0

Его работа в моем случае ... Просто попробуйте поставить SOP следующим образом: static void exitProgram() { \t System.out.println («Gonna exit»); System.exit (0); } –

+0

Является ли cmd-приглашение прекращать сэра? –

0
case 'X': 
      Book book = new Book(); 
      book.exitProgram(); 
      break; 

Вы не конструктор, который не может принять не-аргументы

public Book() { 
} 

Это должно быть определено в книге класса, если вы хотите создать «книгу» без аргументов.

ИЛИ

вы должны создать объект книги, передав необходимые аргументы

case 'X': 
       Book book = new Book("test","test",1,"test"); 
       book.exitProgram(); 
       break; 
+0

Я создал конструктор, который не принимает никаких аргументов. Теперь он компилируется. Однако ввод «X» не выходит из программы? –

+0

Это точно. System.exit() убьет Jvm. Если JVM не работает, программа не будет работать. – Reddy

+0

Я тестировал в своем местном, это выход. Так что просто проверьте, что вы делаете. – Reddy

0

Java времени выполнения не предоставляет по умолчанию без аргументов конструктора только тогда, когда не существует конструктор, определенный в классе. В вашем случае у вас есть конструктор с несколькими аргументами, поэтому конструктор no argument не будет добавлен временем выполнения Java. Вы должны фактически поставить конструктор аргументов в свой класс Book.

Смежные вопросы

 Смежные вопросы