私は私のコードでArrayOutOfBoundExceptionエラーの可能なソースを把握しようとしています。アレイは空ですか?
コードの目的は、そのようなメモ帳ファイルへのカードの山を印刷することである。
public void printCardPiles (PrintWriter writer)
{
writer.println("Piles: ");
for (int i = 0; i < piles.size(); i++)
{
writer.println();
MyArrayList<Card> tester = piles.get(i).getList();
writer.print(tester.toString());
}
}
問題は、私はArrayIndexOutOfBoundsExceptionがを得続けるが、私はかなりどこ源を見つけ出すことはできませんですから来ている。私はまだどんな限界例外のうちを取得していないよ
public void printCardPiles (PrintWriter writer)
{
writer.println("Piles: ");
for (int i = 0; i < 1; i++) // CHANGE: i < piles.size() to i < 1
{
writer.println();
MyArrayList<Card> tester = piles.get(i).getList();
writer.print(tester.toString());
}
}
:
私は私がコードに変更した場合でも気づきました。
例外は、行writer.print(tester.toString());
を指しているので、それがソースになる可能性がありますか?正確な例外は、(コンテキストに追加されたコメントと)以下の通りである:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at Card.toString(Card.java:134) // Sets up a card object
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at MyArrayList.toString(MyArrayList.java:168)
at Table.printCardPiles(Table.java:199) // The exception location
at SortCardGame.playGame(SortCardGame.java:113) // Where the exception's method is being called from
at SortCardGame.main(SortCardGame.java:52)
このコードが(空の配列がパイルになり、この場合に)空の配列を使用していることを意味しません。それは例外を引き起こしますか?それとも別のことですか?
注:のtoString()カードについては、同様に次のようになります。私は助けみんなに感謝
public String toString()
{
String printString = RANKS[rank - 1] + SUITS[suit - 1]; // RANKS is the the array holding all the possible Ranks
// rank is what rank the current card is
// Same as the above
return printString;
}
、私はそれはかなり曖昧だ知っているが、必要に応じて、私はより詳細な情報を提供することができます。私は主に、問題を探し始める場所や、問題を引き起こす原因について、いくつかのアイデアを探しています。
編集:リクエストに応じて、私はカードクラスの全体を追加しています。カードのクラスの
public class Card implements Comparable<Card>
{
// For printing the card rank
public static String[] RANKS =
{
" A", " 2", " 3", " 4", " 5", " 6", " 7", " 8", " 9", "10", " J", " Q", " K"
};
// For printing the card suit
public static String[] SUITS =
{
"-C", "-D", "-H", "-S"
};
// private instance variables
private int rank;
private int suit;
// Default Constructor: initialize to Ace of Clubs
public Card()
{
rank = 1;
suit = 1;
}
// Two-Param Constructor : initialize rank and suit
public Card (int initRank, int initSuit)
{
rank = initRank;
suit = initSuit;
}
// Copy constructor: Copies a Card from another Card
public Card (Card otherCard)
{
otherCard.rank = rank;
otherCard.suit = suit;
}
// Returns relative position of this Card to someCard.
// This compares the Cards, first by rank: Aces low, King High
// then Suit within rank: CLUB=1, DIAMOND=2, HEART=3, SPADE=4
public int compareTo (Card someCard)
{
if (rank > someCard.rank)
{
if (suit > someCard.rank)
{
return 1;
}
else if (suit < someCard.rank)
{
return -1;
}
else
{
return 0;
}
}
else if (rank < someCard.rank)
{
if (suit > someCard.rank)
{
return 1;
}
else if (suit < someCard.rank)
{
return -1;
}
else
{
return 0;
}
}
else
{
if (suit > someCard.rank)
{
return 1;
}
else if (suit < someCard.rank)
{
return -1;
}
else
{
return 0;
}
}
}
// Determines whether this Card has the same rank and suit
// as another Card passed in - Note cast of obj to Card
@Override
public boolean equals (Object obj)
{
Card someCard = (Card) obj;
return (someCard.compareTo (this) == 0);
}
// Print the card's rank and suit using the static
// String arrays defined about
public String toString()
{
String printString = RANKS[rank - 1] + SUITS[suit - 1];
return printString;
}
}
簡単なメモ、I はは等号を書いていない()またはのtoString()。
エラーの完全なスタックトレースを投稿することができます –
'rank'(*および/または*' suit')が '0'の場合 –
あなたの詳細を投稿してください 'Card'クラス – Jerry06