Java 当我使用-1退出循环时,为什么要获取ArrayIndexOutOfBounds?

Java 当我使用-1退出循环时,为什么要获取ArrayIndexOutOfBounds?,java,Java,我在上纸牌和甲板课。我已经做到了这一点,它要求用户输入1-52中的数字,该数字将显示一张卡,而a-1将退出循环。循环结束后,将显示所有52张卡。最后,我希望我的程序能够达到这样一个点:用户输入他们想要发多少张牌,程序就会发牌。在我到达之前,在输入-1之后,我一直得到一个ArrayIndexOutOfBounds错误。这是我的密码 我的卡片类(保持片段简短): 我的司机: public class driver { public static void main(String []args

我在上纸牌和甲板课。我已经做到了这一点,它要求用户输入1-52中的数字,该数字将显示一张卡,而a-1将退出循环。循环结束后,将显示所有52张卡。最后,我希望我的程序能够达到这样一个点:用户输入他们想要发多少张牌,程序就会发牌。在我到达之前,在输入-1之后,我一直得到一个ArrayIndexOutOfBounds错误。这是我的密码

我的卡片类(保持片段简短):

我的司机:

public class driver
{
    public static void main(String []args)
    {
        Scanner kb = new Scanner(System.in);        //For int
        Scanner kb2 = new Scanner(System.in);       //For strings
        int iNum=0;             //holds users input for non-negative number
        String strDeck;         //variable to catch showDeck

        do
        {
            System.out.println ("Enter a number between 1-52, enter -1 to stop.");

            iNum = kb.nextInt();
            if (iNum <= -1)
            {
                strDeck = showDeck();
            }
            Cards userCard = new Cards(iNum);
            System.out.println ("Your card is " + userCard.toString());
        }

        while (iNum >= -1);
        {
            System.out.println("Press ENTER to continue ");
            kb2.nextLine();
        }
公共类驱动程序
{
公共静态void main(字符串[]args)
{
Scanner kb=新扫描仪(System.in);//用于int
Scanner kb2=新扫描仪(System.in);//用于字符串
int iNum=0;//保存用户输入的非负数
String strDeck;//捕获showDeck的变量
做
{
System.out.println(“输入1-52之间的数字,输入-1停止”);
iNum=kb.nextInt();
如果(iNum=-1);
{
System.out.println(“按回车键继续”);
kb2.nextLine();
}
对于间距问题,很抱歉,特别是我得到的错误是

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at cards.Cards.<init>(Cards.java:44)
at cards.driver.main(driver.java:28)
线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:-1 at cards.cards.(cards.java:44) at cards.driver.main(driver.java:28)
因为,正如您的代码所说,当用户输入-1时,它会继续执行
新卡(iNum)
,即
新卡(-1)
(就在该
if
语句之后)

也许您想将该位放在
else
语句中,或者您也可以
showDeck()
调用后将其从循环中断开


顺便说一下,请注意换行符。您的代码现在的格式可能有点混乱。您有:

do {
   ...
}

while (iNum >= 1);
{
   ...
}
但是,
while
do
循环的一部分,而不是它后面的
{…}
范围的一部分(注意分号的位置)。格式有点误导,很容易导致错误。您可能希望改为如下格式:

do {
   ...
} while (iNum >= 1);

{
   ...
}

尽管这一切似乎都有点输入错误,我怀疑您是想在“按ENTER键继续”时应用
while
条件位也/相反。

谢谢,这就解决了它。我在
if
语句之后加入了
else
,并将
while
语句修复为
iNum>-1
@ph0bolus。你应该熟悉一个调试器,例如Eclipse或NetBeans附带的调试器。然后你可以一次一行地遍历你的代码来调试它看看到底发生了什么。我现在使用的是Eclipse,这比他们在本学期初让我们使用的notepad++有了很大的进步。它对检查和修复语法错误绝对有帮助,我有时会遇到逻辑错误。我还想指出,do-while循环条件是在这个前提下运行的当它大于或等于-1时,它会继续运行,在本例中,它应该大于-1,因为在-1时,您不希望该条件再运行(iNumYeah,我的意思是
iNum>-1
,到目前为止,我还没有完全掌握
do while
循环背后的逻辑。祝你好运,我去过那里,并且是一个Java类的助教,所以我能理解。用于逐步执行代码的调试器非常有用,正如Jason所说,这里有一个很好的教程供你参考nce:@matrixanomaly我会查出来的,谢谢你的帮助。
do {
   ...
} while (iNum >= 1);

{
   ...
}