2017-02-14 12 views
1

私は在庫管理アプリケーションを作成しました。ここで、ユーザーは在庫を追加、表示、削除できます。ユーザーがAを入力すると、プログラムはユーザーにデータの入力を促します。ユーザーがDを入力すると、プログラムはそのデータをインベントリーに表示します。私はこれを達成するためにLinkedListを使用します。私はこれに全く新しいです。ユーザーにデータの入力を促すことができましたが、表示できませんでした。コード上に赤い線があります。どこが間違っていたのですか?私が尋ねる方法が間違っているなら、私は残念です。私を訂正してください。データを表示する際のJava LinkedList

Main.java

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

     int t = 0; 

     LinkedList myList = new LinkedList(); 

     while(t != 1) 
     { 
      System.out.print("I, A, D"); 
      char input = sc.next().charAt(0); 


      if(input == 'A') 
      { 
       System.out.print("Please enter item id: "); 
       int id = sc.nextInt(); 
       sc.nextLine(); 

       System.out.print("Please enter item name: "); 
       String name = sc.nextLine(); 

       System.out.print("Please enter item type: "); 
       String type = sc.nextLine(); 

       System.out.print("Please enter item price: "); 
       double price = sc.nextDouble(); 
       sc.nextLine(); 

       Item I1 = new Item(id, name, type, price); 
       myList.addItemToFront(I1); 
      } 

      else if(input == 'D') 
      { 
       myList.DisplayItem(); //at this point, theres red line which i dont know why? 
      } 
     } 

LinkedList.java

class LinkedList { 

    private Node head; // first node in the linked list 
    private int count; 

    public int getCount() { 
     return count; 
    } 

    public Node getHead() { 
     return head; 
    } 

    public LinkedList() { 
     head = null; // creates an empty linked list 
     count = 0; 
    } 

    public void addFront(int n) { 
     Node newNode = new Node(n); 

     newNode.setLink(head); 
     head = newNode; 

     count++; 
    } 

    public void deleteFront() { 
     if (count > 0) { 
      head = head.getLink(); 
      count--; 
     } 
    } 

    public void addItemToFront(Item I1) 
    { 
     Node itemNode = new Node(I1); 
     itemNode.setLink(head); 
     head = itemNode; 
    } 

    public void DisplayItem(Node head) 
    { 
     if(head == null) 
     { 
      return; 
     } 

     Node current = head; 

     while (current != null) 
     { 
      System.out.println(current.data.toString()); 
      current = current.getLink(); 
     } 

     System.out.println(current); 
    } 

    public int length(Node head) 
    { 
     if(head == null) 
     { 
      return 0; 
     } 

     int count = 0; 
     Node current = head; 
     while(current != null) 
     { 
      count++; 
      current = current.getLink(); 
     } 
     return count; 
    } 

Node.java

public class Node { 

    Object data; 
    private Node link; 

    public Object getData() { 
     return data; 
    } 

    public void setData(Object data) { 
     this.data = data; 
    } 

    public Node getLink() { 
     return link; 
    } 

    public void setLink(Node link) { 
     this.link = link; 
    } 

    public Node(Object data) { 
     this.data = data; 
     this.link = null; 
    } 
} 

サンプル出力(どのプログラムが例を実行する必要があります)

I, A, D 

A 

Please enter item id: 001 

Please enter item name: Wooden Chair 

Please enter item type: Furniture 

Please enter item price: 50.30 

I, A, D 

D 

001, Wooden Chair, Furniture, 50.30 
+0

は「_butはit_を表示することができませんでした」。 –

+0

すみません。これはまったく新しいものです。私はそれに応じて投稿を編集した。 –

+0

また、Nodeクラスもポストすることができます。また、次のようにして、型安全性のためにLinkedListクラスGenericを作成することも推奨されています。Nodeクラスをより一般的なものにする。 –

答えて

1
public void DisplayItem() { 
    if (head == null) { 
     return; 
    } 

    Node current = head; 

    while (current != null) { 
     System.out.println(current.getNodeItem().toString()); 
     current = current.getLink(); 
    } 
} 

このメソッドを使用し

+0

詳細な説明ありがとうございます!はい、それは動作します。それは大変感謝しています! –

0

私はLinkedList.javaクラスであなたのdeleteメソッドを見ての通り、それは反復する前に、ノードのヘッドは、それに渡されることを期待しています。ヘッドノードを表示方法に渡す必要があります。

上記の正しいコードを記述していれば、Main.javaのコンパイラエラーであると思います。

+0

私の間違いを指摘していただきありがとうございます。どうしてこのことが問題になるのですか?私はメソッドがコードの配置を考慮せずにメインが取り出すものだと思った?あなたのアドバイスは間違いなく私を助けます。 –

+0

DisplayItem()、DisplayItem(Node head)、DisplayItem(Node head、String toAppend)などのJavaクラスには、多くのオーバーロードされたメソッドがあります。JVMは、クライアントコードから何を呼び出すかを正確に知っていなければなりません - したがって、メソッドのシグネチャは重要です。これがあなたのために物事をより明確にすることを願っています。 – PankajT

0

リンクされたリストクラスの表示メソッドは、ノードであるノード型の引数を受け入れます。あなたはその引数をmainメソッドから渡す必要があり、それがうまくいくでしょう。 の代わりに:myList.DisplayItem(); これを行う:myList.DisplayItem(head); LinkedListクラスでllokを実行した場合は、 'head'をプライベート変数として作成し、パブリックにしてMainクラスからアクセスできるようにするか、DisplayItem(Node head )メソッドを使用しています。これは、頭をグローバル変数として使用してから、DisplayItemメソッドで繰り返し処理するためです。 したがって、メソッド定義から引数を削除するほうが効果的です。あなたは完全に入力し、期待される出力を記載した場合に役立つだろう -

+0

DisplayItemにパラメータを渡す必要はありません。 LinkedListオブジェクトはhead値を持ち、DisplayItemはその値に直接アクセスできます。 – IfOnly

+0

私はあなたが意味することを得た。しかし、それは私が頭を付け加えると、まだ私に赤い線を与えました。それはなぜ私は理解していない可変の頭を作成する必要があります私に尋ねる?頭はリンクリストから取り出すべきではありませんか?私は何かが欠けている。 –

+0

@ハキムバジュリ:あなたはどんな問題に直面していますか?どのラインで。私はDisplayItem関数の問題のみを参照してください。 – IfOnly

関連する問題