-2
import java.io.*;
import java.util.Scanner;

public class ws1qn2 
{

    public static void main(String[] args) throws IOException
    {
        Scanner input=new Scanner(System.in);
        int a;
        int d;
        System.out.println("Please enter the number of characters the word has: ");
        d=input.nextInt();
        a=d-1;
        char word[]=new char[a];
        for (int b=0;b!=a;b++)
        {
            System.out.println("Please enter character no."+b+1);
            String str;
            str=input.next();
            char c=str.charAt(b);
            word[a-b]=c;
        }
        for (char reverse : word)
        {
            System.out.print(reverse);
        }
    }
}

这是我运行程序时发生的情况:

Please enter the number of characters the word has: 
3
Please enter character no.01
s
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
    at ws1qn2.main(ws1qn2.java:22)

Process completed.

帮助?它看起来像堆栈溢出,但我不知道如何修复它。

4

2 回答 2

1

您的问题如下:您将 word 初始化为长度数组d-1,在您的情况下为 2,但是 Java 数组的索引为 0,因此长度为 2 的数组仅上升到索引 1:

然后您尝试访问word[2]以将其设置为c,这会使您的数组索引超出范围

于 2013-02-03T08:43:32.660 回答
1

str每次都被读取,它的大小似乎应该是 1。你不应该这样做char c=str.charAt(b);,而是你应该总是得到他的第一个字符char c=str.charAt(0);

当 b 为零时的另一个问题a-ba,因此words[a-b]超出了wordssize的数组的范围a。您应该从此处的索引中减去 1:words[a-b-1]

于 2013-02-03T08:44:40.710 回答