gpt4 book ai didi

java - 通过我的方法对数组进行排序错误Java

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:03 26 4
gpt4 key购买 nike

我是编程新手,需要一些帮助。我应该创建自己的方法来检查一个数组是否具有另一个数组的子序列。这意味着如果第一个数组是 {1, 2, 3, 4, 5},第二个数组是 {1, 2, 3},则第二个数组是第一个数组的子序列。但是,如果第一个是 {1, 2, 3, 4, 5},第二个是 {1, 4, 5},则它不是子序列,因此第二个也必须按顺序排列。

我尝试通过字符串这样做:

private static boolean subs(int[] array, int[] subsequence) {
String a = Arrays.toString(array);
String b = Arrays.toString(subsequence);
boolean c = false;

if (a.equals(b)) {
return true;
}

for (int i = 0; i < a.length(); i++) {
if (!(b.equals(a.substring(i, b.length() + i)))) {
c = false;
} else {
c = true;
break;
}
}
if (c == true) {
return true;
} else {
return false;
}
}

但是我遇到了 3 个错误,这是打印屏幕:

enter image description here

这是我测试该方法的方法:

    int[] fArray = { 1, 2, 3, 4, 5 };
int[] tempArray = { 2, 3, 4 };
System.out.println(subs(fArray, tempArray));

我知道我可能犯了很多错误,所以用它来打击我。

最佳答案

这里:

for (int i = 0; i < a.length(); i++) {
if (!(b.equals(a.substring(i, b.length() + i)))) {

你的外循环条件确保 i 保持小于 a.length()。但是然后你尝试在 a 中获取一个适合 b.length()+i 的子字符串!

换句话说:对于任何 b.length() > 0 ...该代码将始终尝试获取超出 a 末尾的字符。

结果处理中也存在一个错误 - 似乎很可能您分配

c = true;

在某个时刻;稍后覆盖

c = false;

换句话说:您的代码忘记了他找到了匹配项!更简单的解决方案:当遇到 true 情况时,只需在那里返回 true 即可!如果你不在循环内返回;你最后只是返回 false。

最后:虽然将数组转换为字符串似乎是一个很酷的想法……但这并不能真正给你带来任何好处。您仍在执行遍历第一个数组并检查第二个数组是否在其中的工作。在提供的数组上直接编写执行此操作的代码...与您通过“字符串迂回”获得的结果没有太大区别。

编辑:在方法中使用多个返回时,您只需确保任何可能的路径都有返回语句。对于您的情况:

boolean subs(... {

if equal strings
return true

for i as index in a
if a.substring equals b
return true

return false

关于java - 通过我的方法对数组进行排序错误Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40811152/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com