我想编写一个在数组中查找三个数字的程序,该程序给出长度为三的算术序列-如果b-a = c-b,则三个数字a,b和c构成长度为3的算术序列。
问题在于,即使在应有的情况下,他的代码也不会显示“是”,如果这样,它也永远不会进入命令。我想在为b-a = c-b编写数学命令时遇到问题。
public static void main (String[] args) {
int [] a = new int [args.length - 1];W
for (int i = 0; i<a.length; i++) {
a[i] = Integer.parseInt(args[i+1]);
}
for (int i = 0; i < a.length - 2; i++) {
for (int j = i+1; j < a.length - 1; j++) {
int b = a[i];
for (int k = j + 1; k < a.length; k++) {
int c = a[k];
if (b - a[i] == c - b) {
System.out.println("yes");
break;
}
}
}
}
}
}
最佳答案
我认为这是您想要的:
变化:
首先对数组进行排序
当您脱离最内层的循环时,
还必须打破所有外部循环(下面的检查代码)
Arrays.sort(a);
outerLoop:
for (int i = 0; i < a.length - 2; i++) {
for(int j = i+1; j < a.length - 1; j++){
for(int k = j+1; k < a.length; k++){
if(a[j] - a[i] == a[k] - a[j]){
System.out.println("yes");
break outerLoop;
}
}
}
}
更新:
由于以下代码,您缺少数组的第一个元素:
int [] a = new int [args.length - 1]
for (int i = 0; i<a.length; i++) {
a[i] = Integer.parseInt(args[i+1]);
}
更改为:
int [] a = new int [args.length]
for (int i = 0; i<a.length; i++) {
a[i] = Integer.parseInt(args[i]);
}
关于java - 如何检查算术序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33706326/