我是Java新手,正在练习一些程序。有人可以在第10行向我解释以下程序吗
public static void main(String[] args) {
String str1 = "xxyz";
String str2 = "yxzx";
System.out.println("Original strings: " + str1 + " " + str2);
System.out.println(stringPermutation(str1, str2));
}
public static void stringPermutation(String str1, String str2) {
int[] arr = new int[500];
for (int i = 0; i < str1.length(); i++) {
System.out.println(arr[(int) str1.charAt(i)] += 1); //line 10
}
}
它显示以下输出:
Original strings: xxyz yxzx
1
2
1
1
我试图了解,怎么arr[(int) str1.charAt(i)]i.e, arr['x']
可能。请帮助我理解这一点。
当您初始化一个空整数数组时,每个项目的初始值为零,其中的每个索引arr
将包含0
int[] arr = new int[500];
arr[0] = 0;
arr[1] = 0;
//...
arr[500] = 0;
x的ASCII值为120,y为121,z为122,因为该arr
字段包含500个项目,则120、121和122在范围内。
在循环中,将每个元素加1。因此,在您str1 = "xxyz"
遇到第一个x时,会将1加到索引中,arr[120]
使它arr[120]
成为1;当再次遇到x时,会将1加到使arr[120]
变为2 的值上。
arr[(int) 'x'] += 1 //=> arr[120] + 1 = (0 + 1) = 1
arr[(int) 'x'] += 1 //=> arr[120] + 1 = (1 + 1) = 2
arr[(int) 'y'] += 1 //=> arr[121] + 1 = (0 + 1) = 1
arr[(int) 'z'] += 1 //=> arr[122] + 1 = (0 + 1) = 1
arr['x']
之所以可能,是因为在java char中,数据类型是单个16位整数,而int是32位有符号整数。
更新:
在程序的继续中,第二个循环在str2
char索引处减去一个,如果str2
是str1
值的排列,则所有项目arr
均应重置为0。
在str1上循环之后。数组中的值是
arr[0] = 0
//...
arr[120] = 2 //arr['x']
arr[121] = 1 //arr['y']
arr[122] = 1 //arr['z']
//...
arr[500] = 0
什么时候 str2 = "yxzx"
arr[(int) 'y'] -= 1 //=> arr[121] - 1 = (1 - 1) = 0
arr[(int) 'x'] -= 1 //=> arr[120] - 1 = (2 - 1) = 1
arr[(int) 'z'] -= 1 //=> arr[122] - 1 = (1 - 1) = 0
arr[(int) 'x'] -= 1 //=> arr[120] - 1 = (1 + 1) = 0
循环后,str2
值将重置为0
arr[0] = 0
//...
arr[120] = 0 //arr['x']
arr[121] = 0 //arr['y']
arr[122] = 0 //arr['z']
//...
arr[500] = 0
因此,如果所有值均为零,则遍历所有数组,则str2是str1的排列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句