Java二维数组字符串顺序反转时索引越界错误问题求解
问题根因
你对当前二维字符串数组的结构理解有误,触发了数组索引越界:
- 你定义的
String [][] arr = {{"My"}, {"name" }, {"is"}, {"John"}}是4行1列的二维数组:arr[0]对应{"My"},长度仅为1;arr[1]对应{"name"},长度为1,以此类推。 - 你代码中写的
arr[0][3]是尝试取第一行的第4个元素,第一行只有1个元素,自然会抛出Index 3 out of bounds for length 1的异常。
你之前相同逻辑的int类型代码可以正常运行,是因为你当时定义的int二维数组肯定是{{1,2,3,4}}这种1行4列的结构,和当前字符串数组的结构完全不同。
修复方案
提供两种可选的修复方式:
方案1:保持现有数组结构,修改取值逻辑
现有数组是每行存1个字符串,直接按行逆序取值即可:
public class Main { public static void main(String[] args) { String [][] arr = {{"My"}, {"name" }, {"is"}, {"John"}}; String arr1 = arr[3][0]; String arr2 = arr[2][0]; String arr3 = arr[1][0]; String arr4 = arr[0][0]; String arrAll = arr1 + arr2 + arr3 + arr4; System.out.println(arrAll); } }
运行输出为JohnisnameMy,符合反转拼接的需求。
方案2:保持现有取值逻辑,修改数组结构
如果你要沿用arr[0][x]的取值写法,把数组改成1行4列的结构即可:
public class Main { public static void main(String[] args) { String [][] arr = {{"My", "name", "is", "John"}}; String arr1 = arr[0][3]; String arr2 = arr[0][2]; String arr3 = arr[0][1]; String arr4 = arr[0][0]; String arrAll = arr1 + arr2 + arr3 + arr4; System.out.println(arrAll); } }
运行输出和方案1完全一致。
内容的提问来源于stack exchange,提问作者Elec Hill
相关产品推荐
相关产品推荐

