2017-08-03 12 views
1
class Library { 

    String libraryName; 
    String address; 

    Library(String namelibrary) 
    { 
     libraryName=namelibrary; 
    } 

    Book[] books=new Book[150]; 

    void addBook(Book newBook) 
    { 
     books[i]= newBook; 
     i++; 
    } 

    class Book 
    { 
     String title; 
     boolean borrowed; 
    } 
} 

public class test{ 

    public static void main(String[] args) 
    { 
     Library firstLibrary = new Library("10 Main St."); 
     Library secondLibrary = new Library("228 Liberty St."); 
     firstLibrary.books[0]= new Book("Maths"); 
    } 
} 

このコードを実行すると、シンボルブックが見つからないというメッセージが表示されます。Javaオブジェクト名のクラス内のクラス

私の理解によれば、このエラーはライブラリ内のクラスであり、そのオブジェクトから定義しています。 助けてガイドしてください。事前にお気軽にご連絡ください

+0

これはあなたを助けるためにハード実際のコードではないようなクラスライブラリの後にクラスのブックを定義してみてください。 MAYBEパッケージの宣言、インポート???難しいこと –

+0

'Library'の中にある' Book'をコンパイラに伝える必要があるので、 'newBook'だけでなく' new Library.Book'が必要です。また、自分のファイルでクラスを宣言し、そのようなネストされたクラスを避けるのがより一般的です。 – litelite

+0

'Book'は' Library'のような「第1レベル」クラスではないので、 'test'クラスの文脈では直接到達できません。新しい 'Book'アイテムを実際にインスタンス化するには、' Book'コンストラクタを 'Library.new Book(" Maths ");'のように呼び出す必要があります。 – Polb

答えて

2

お客様のブッククラスはLibraryのメンバーです。そのため、ライブラリクラスからのみアクセスできます。だからあなたのコードが

firstLibrary.books[0]= firstLibrary.new Book("Maths"); 

でなければなりませんそして、あなたの次のエラーは、名前を受け取るブックの適切なコンストラクタを持っていないです。 1つを持って、それは大丈夫です。 [OK]を

class Book { 

     String title; 
     boolean borrowed; 

     public Book(String title) { 
      this.title = title; 
     } 

    } 

は、あなたがあなたのを宣言したことはありません。この方法

void addBook(Book newBook) { 
     books[i] = newBook; 
     i++; 
    } 

に途中で1つの以上のエラーのように見えます。それを宣言して初期化してください。

class Library { 

String libraryName; 
String address; 
private int i = 0; 
.. 
.. 

あなたが最近Javaを起動したようです。だから今はネストされたクラスを避けてください。

+0

実際に私を助けてエラーを指摘してくれてありがとうJavaに慣れていませんでしたが、コードが非常に大きく、問題の原因となっていた部分をここに置き、他の部分を削除したかったのです。 このプロセスでは、関連のない部分とともにBookのint宣言とコンストラクタを削除しました とにかく、もう一度感謝します。私は非常に圧倒的な応答を期待していませんでした –

-2

はちょうど

class Library { 


class Book{ 

    String title; 
    boolean borrowed; 

} 
String libraryName; 
String address; 

Library(String namelibrary) 
{ 
    libraryName=namelibrary; 
} 

Book[] books=new Book[150]; 

void addBook(Book newBook) 
{ 
    books[i]= newBook; 
    i++; 
} 


} 
public class test{ 
public static void main(String[] args) 
{ 
Library firstLibrary = new Library("10 Main St."); 
Library secondLibrary = new Library("228 Liberty St."); 
firstLibrary.books[0]= new Book("Maths"); 

}} 
+0

これは今でもまだ内部クラスです...同じエラーが発生します – litelite

+0

問題は囲むクラス内の 'Book'クラスの位置から来ていません、 Book'項目がインスタンス化されます。 – Polb