java - 我们可以在java中传递一个字符作为整数数组的索引吗
问题描述
我是 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 的排列。
推荐阅读
- svg - 使用 pixjs 进行多边形渲染
- vue.js - Ag 网格:使用分页展开/折叠
- java - 带有 @JsonProperty 注释的 json 模型的反序列化使用构建器模式更改了属性
- scala - 我们可以使用 Scala 对 Databricks Delta 表执行 UPDATE 和 DELETE 操作吗?
- html - rmarkdown html图中的缩放功能
- latex - Latex英文文档中的中文字体
- nativescript - 如何在 Nativescript for iOS 中实现 One 信号
- azure - Azure 应用服务 - 无法将日志存储在 Azure 存储中
- java - Java 对于每个循环,类中的每个实例
- c++ - 创建没有布局的可滚动窗口