String[] lastPinyinArr = Arrays.toString(lastPinyin).split(","); String[] inputPinyinArr = Arrays.toString(lastPinyin).split(",");要遍历last Pinyin和input Pinyin中有没有相同的,有则返回为true
时间: 2024-03-15 20:45:20 浏览: 52
你可以使用两个嵌套的 for 循环来遍历两个数组,然后逐一比较它们的元素是否相等,如果找到相同的元素,则返回 true。代码示例如下:
```
public boolean hasSamePinyin(String[] lastPinyin, String[] inputPinyin) {
for (String lp : lastPinyin) {
for (String ip : inputPinyin) {
if (lp.trim().equals(ip.trim())) {
return true;
}
}
}
return false;
}
```
这个方法首先遍历 lastPinyin 数组,对于每个元素,再遍历 inputPinyin 数组,比较它们是否相同。如果找到了相同的元素,就返回 true。如果遍历完了整个数组,都没有找到相同的元素,就返回 false。注意,这里使用了 trim() 方法来去除元素中的空格。
相关问题
优化一下List<JSONObject> principalUsers = new ArrayList<>(); StringBuffer sb = new StringBuffer(); String principal = specialWorkSignature.getPrincipal(); List<String> principalUserList = Arrays.asList(principal.split(",")); principalUserList.forEach(c -> { sb.append(0).append(","); }); specialWorkSignature.setPrincipalFile(sb.deleteCharAt(sb.length() - 1).toString()); String recipient = specialWorkSignature.getRecipient(); List<String> recipientUserList = Arrays.asList(recipient.split(",")); StringBuffer sc = new StringBuffer(); recipientUserList.forEach(c -> { sc.append(0).append(","); }); specialWorkSignature.setRecipientFile(sc.deleteCharAt(sc.length() - 1).toString());
可以使用Java 8引入的 `String.join()` 方法和 `Stream` API 来优化这段代码,如下所示:
```
List<String> principalUserList = Arrays.asList(specialWorkSignature.getPrincipal().split(","));
String principalFile = String.join(",", Collections.nCopies(principalUserList.size(), "0"));
specialWorkSignature.setPrincipalFile(principalFile);
List<String> recipientUserList = Arrays.asList(specialWorkSignature.getRecipient().split(","));
String recipientFile = String.join(",", Collections.nCopies(recipientUserList.size(), "0"));
specialWorkSignature.setRecipientFile(recipientFile);
```
这里,我们使用 `Collections.nCopies()` 方法创建一个包含指定元素数量的、重复指定元素的不可变列表。然后使用 `String.join()` 方法将这个列表中的所有元素用指定分隔符连接起来,生成一个新的字符串。这样可以避免使用循环对字符串进行操作,提高代码的简洁性和性能。
package LiuShuMa; import java.util.*; public class Test { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); // 测试数据组数 while (n-- > 0) { int[] start = new int[6]; // 初始布局 int[] end = new int[]{1, 2, 3, 4, 5, 6}; // 目标布局 for (int i = 0; i < start.length; i++) { start[i] = scanner.nextInt(); } int ans = BFS(start, end); System.out.println(ans); } } static int BFS(int[] start, int[] end) { Queue<int[]> queue = new LinkedList<>(); // 队列存储布局 Map<String, Integer> dist = new HashMap<>(); // 记录初始布局到目标布局的距离 String startStr = Arrays.toString(start); // 初始布局转为字符串 queue.offer(start); dist.put(startStr, 0); while (!queue.isEmpty()) { int[] cur = queue.poll(); String curStr = Arrays.toString(cur); if (curStr.equals(Arrays.toString(end))) { // 当前布局与目标布局相等 return dist.get(curStr); } // α变换 int[] next1 = cur.clone(); next1[1] = cur[0]; next1[4] = cur[1]; next1[3] = cur[4]; next1[0] = cur[3]; String nextStr1 = Arrays.toString(next1); if (!dist.containsKey(nextStr1)) { queue.offer(next1); dist.put(nextStr1, dist.get(curStr) + 1); } // β变换 int[] next2 = cur.clone(); next2[2] = cur[1]; next2[5] = cur[2]; next2[4] = cur[5]; next2[1] = cur[4]; String nextStr2 = Arrays.toString(next2); if (!dist.containsKey(nextStr2)) { queue.offer(next2); dist.put(nextStr2, dist.get(curStr) + 1); } } return -1; // 没有符合条件的变换序列 } }给代码的每一行加注释
```
package LiuShuMa; // 定义了一个包名为LiuShuMa
import java.util.*; // 导入java.util包,包含了Scanner、Queue、LinkedList、Map、HashMap等类
public class Test { // 定义了一个名为Test的公共类
public static void main(String[] args) { // 定义了一个公共静态方法main,参数为String类型数组args
Scanner scanner = new Scanner(System.in); // 创建一个Scanner对象,读取标准输入的数据
int n = scanner.nextInt(); // 读取一个整数,表示测试数据组数
while (n-- > 0) { // 循环n次,每次处理一组测试数据
int[] start = new int[6]; // 定义一个初始布局数组start,长度为6
int[] end = new int[]{1, 2, 3, 4, 5, 6}; // 定义一个目标布局数组end,长度为6,初始化为{1, 2, 3, 4, 5, 6}
for (int i = 0; i < start.length; i++) { // 循环6次,读取初始布局
start[i] = scanner.nextInt();
}
int ans = BFS(start, end); // 调用BFS方法,计算从初始布局到目标布局的最小变换序列长度
System.out.println(ans); // 输出最小变换序列长度
}
}
static int BFS(int[] start, int[] end) { // 定义了一个静态方法BFS,返回值为int类型,参数为初始布局start和目标布局end
Queue<int[]> queue = new LinkedList<>(); // 创建一个队列,用于存储布局,类型为整型数组
Map<String, Integer> dist = new HashMap<>(); // 创建一个Map,用于记录初始布局到目标布局的距离,键为布局的字符串形式,值为距离
String startStr = Arrays.toString(start); // 将初始布局转为字符串
queue.offer(start); // 将初始布局加入队列
dist.put(startStr, 0); // 将初始布局与目标布局的距离初始化为0
while (!queue.isEmpty()) { // 当队列不为空时循环
int[] cur = queue.poll(); // 取出队列中的一个布局
String curStr = Arrays.toString(cur); // 将当前布局转为字符串
if (curStr.equals(Arrays.toString(end))) { // 当前布局与目标布局相等
return dist.get(curStr); // 返回当前布局与目标布局的距离
}
// α变换
int[] next1 = cur.clone(); // 复制当前布局
next1[1] = cur[0]; // 根据α变换规则更新next1数组
next1[4] = cur[1];
next1[3] = cur[4];
next1[0] = cur[3];
String nextStr1 = Arrays.toString(next1); // 将next1数组转为字符串
if (!dist.containsKey(nextStr1)) { // 如果Map中不包含next1布局
queue.offer(next1); // 将next1布局加入队列
dist.put(nextStr1, dist.get(curStr) + 1); // 记录next1布局与目标布局的距离,并加1
}
// β变换
int[] next2 = cur.clone(); // 复制当前布局
next2[2] = cur[1]; // 根据β变换规则更新next2数组
next2[5] = cur[2];
next2[4] = cur[5];
next2[1] = cur[4];
String nextStr2 = Arrays.toString(next2); // 将next2数组转为字符串
if (!dist.containsKey(nextStr2)) { // 如果Map中不包含next2布局
queue.offer(next2); // 将next2布局加入队列
dist.put(nextStr2, dist.get(curStr) + 1); // 记录next2布局与目标布局的距离,并加1
}
}
return -1; // 没有符合条件的变换序列,返回-1
}
}
```
阅读全文