猿问

为什么我的字符串比较代码不起作用?

这段代码抛出


错误“线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException:0


在 basic2.compareStrPractice.main(compareStrPractice.java:15)”


int i;

    char[] chr1 = {};

    char[] chr2 = {};

    String s1 = "man";

    String s2 = "nam";


        for ( i= 0; i<s1.length(); i++){


            chr1[i] = (char)s1.charAt(i);

            chr2[i] = (char)s2.charAt(i);


        }

        if ((chr1[0] == chr2[2]) && (chr1[1] == chr2[1]) && (chr1[2] == chr2[0])){


            System.out.println("They are Palindrom!");

        }


}

我想打印声明。但它抛出 ArrayOutOfBoundary 错误。


POPMUISE
浏览 73回答 3
3回答

米脂

问题是您声明字符数组的方式。char[]&nbsp;chr1&nbsp;=&nbsp;{};你这样做的方式是用 0 的大小定义数组。在 Java 中,您需要像这样指定数组的大小:char[]&nbsp;chr1&nbsp;=&nbsp;new&nbsp;char[3];它的作用是声明一个预定义大小为 3 的 char 数组。

qq_遁去的一_1

如果你正在尝试为回文写代码,它在很多方面都是错误的,但对于错误,你正在初始化一个 0 大小的空数组,使用这个char[]&nbsp;chr1&nbsp;=&nbsp;new&nbsp;char[3];

鸿蒙传说

您还应该首先检查长度以确保它们相同。否则,您可能会得到另一个ArrayIndexOutOfBoundsException.&nbsp;当您使用较长的字符串长度来索引较短的字符数组时,就会发生这种情况。由于对于较长的字符串,您不希望在单个if语句中进行多次比较,因此您应该使用循环并从一个数组的开头和另一个数组的结尾开始进行比较。因此,如果长度为 5,您将比较 0 和 4 处的字符,然后是 1 和 3,然后是 2 和 2,然后是 3 和 1,依此类推。以下是一些可能有帮助的其他提示。您不需要创建空数组并填充它们。字符串提供了这种能力。char[] chr1 = s1.toCharArray();事实上,您不需要分配给 String 变量。char[] chr1 = "man".toCharArray();以防万一您想要分配给 String 数组而不是 char 数组,您可以这样做来保存单个字符串数组。String[] str1 = "abcdefghijklmnopqrstuvwxyz".split("");
随时随地看视频慕课网APP

相关分类

Java
我要回答