2016-03-31 4 views
-4

このプログラムの目的は、リンクされたリストを使ってカードのデッキをデザインすることです。 私のコードは実行時に何も印刷しません。 リンクリストを使ってカードのデッキをデザインする

ノードクラス以下HERESに私のコード:

public class Node 
{ 
private Comparable data; 
private Node next; 
public Node() 
{ 
next = null; 
} 
public Node(Comparable c) 
{ 
data = c; 
next = null; 
} 
public Node(Comparable c, Node n) 
{ 
data = c; 
next = n; 
} 
public Comparable getData() 
{ 
return data; 
} 
public void setData(Comparable c) 
{ 
data = c; 
} 
public Node getNext() 
{ 
return next; 
} 
public void setNext(Node n) 
{ 
next = n; 
} 

} 

のLinkedListクラス:

public class LinkedList 
{ 
private Node first = null; 
private Node current = null; 
private Node pre = null; 
public boolean isEmpty() 
{ 
return true; 
} 
public boolean contains(Comparable item) 
{ 
current = first; 
pre = null; 
while ((current != null)&&(current.getData().compareTo(item) < 0)) 
{ 
pre = current; 
current = current.getNext(); 
} 
return ((current != null) && (current.getData().compareTo(item) == 0)); 
} 
public int size() 
{ 
int count = 0; 
current = first; 
pre = null; 
while (current != null) 
{ 
pre = current; 
current = current.getNext(); 
count++; 
} 
return count; 

} 
public void add(Comparable c) 
{ 

Node temp = new Node(c); 
if (pre == null) 
{ 
first = temp; 
} 
else 
{ 
pre.setNext(temp); 
} 
temp.setNext(current); 
current = temp; 
} 
public void remove(Comparable c) 
{ 
if (pre == null) 
{ 
first = first.getNext(); 
} 
else 
{ 
current = current.getNext(); 
if (pre == null) 
{ 
first = current; 
} 
else 
{ 
pre.setNext(current); 
} 

} 

} 
public void clear() 
{ 
first = null; 
} 
public void print() 
{ 
Node current = first; 
while (current != null) 
{ 
System.out.println(current.getData()); 
current = current.getNext(); 
} 
} 
} 

カードのクラス:

public class Card implements Comparable<Card> 
{ 
private int rank; 
private int suit; 
public Card(int suit, int rank) 
{ 
this.rank = rank; 
this.suit = suit; 
} 
public int getRank() 
{ 
return rank; 
} 
public int getSuit() 
{ 
return suit; 
} 
public String toString() 
{ 
switch(suit) 
{ 
case 1: 
switch(rank) 
{ 
case 11: return "Jack of Hearts"; 
case 12: return "Queen of Hearts"; 
case 13: return "King of Hearts"; 
case 14: return "Ace of Hearts"; 
default: return rank + " of Hearts"; 
} 

case 2: 
switch(rank) 
{ 
case 11: return "Jack of Diamonds"; 
case 12: return "Queen of Diamonds"; 
case 13: return "King of Diamonds"; 
case 14: return "Ace of Diamonds"; 
default: return rank + " of Diamonds"; 
} 
case 3: 
switch(rank) 
{ 
case 11: return "Jack of Clubs"; 
case 12: return "Queen of Clubs"; 
case 13: return "King of Clubs"; 
case 14: return "Ace of Clubs"; 
default: return rank + " of Clubs"; 
} 
case 4: 
switch(rank) 
{ 
case 11: return "Jack of Spades"; 
case 12: return "Queen of Spades"; 
case 13: return "King of Spades"; 
case 14: return "Ace of Spades"; 
default: return rank + " of Spades"; 
} 
} 
return null; 
} 
public int compareTo(Card a) 
{ 
if (this.rank < a.rank) 
{ 
return -1; 
} 
if (this.rank > a.rank) 
{ 
return 1; 
} 
if (this.rank == a.rank) 
{ 
if (this.suit < a.suit) 
{ 
return -1; 
} 
if (this.suit > a.suit) 
{ 
return 1; 
} 
} 

return 0; 
} 
} 

CardDeckクラス - カードのリンクリスト:

import java.util.Random; 

public class CardDeck 
{ 
private LinkedList cards; 
private int numCards; 
public void Deck() 
{ 
for (int a = 1; a <= 4; a++) 
{ 
for (int b = 1; b <= 14; b++) 
{ 
cards.add(new Card(a,B)/>); 
} 
} 
} 

public void drawFromDeck() 
{ 
Random rand = new Random(); 
int index = rand.nextInt(cards.size()); 
cards.remove(index); 
numCards--; 
} 
public int getTotalCard() 
{ 
return cards.size(); 
} 
} 

メインクラス:あなたの現在のコードで

public class Main 
{ 
public static void main(String[] args) 
{ 
LinkedList myList = new LinkedList(); 
CardDeck myCards = new CardDeck(); 
myCards.Deck(); 
myList.print(); 
} 
+0

あなたのコードにはインデントがありませんので、すべて左揃えにし、読み込み、理解、デバッグすることはほとんど不可能です。投稿コードを適切なインデント(通常はブロックあたり4つのスペース)を与え、同じブロックのすべてのコードが同じインデントレベルにあるようにして、再フォーマットしてください。これに対するあなたの協力は非常に高く評価され、まともで迅速な回答を得る可能性が高まるでしょう。 –

+0

あなたの書式を修正してください –

+0

何もせず目的を果たしていないmain内のLinkedList myList変数を作成しています - なぜですか?目的を持たないコードを作成しないでください。この無駄な変数を取り除き、何も保持しないので、printを呼び出さないでください。代わりにmyCards変数の内容を出力する必要があります。 –

答えて

0

myList、あなたがプリントアウトされ、コンストラクタが呼び出され過ぎて変更されることはありません。 myCardの内容を印刷する場合は、そのクラスのメソッドにprintステートメントを置き、そのメソッドを呼び出してデッキの内容を印刷するか、ゲッターをcardsにしてクラスの外に印刷する必要があります。

0

不正なプログラムです。 cards.add(新しいカード(a、B)/>);この行ではカードを初期化していないとして という例外がスローされます。 nullです。

関連する問題