【发布时间】:2021-12-02 17:26:34
【问题描述】:
class Main {
public static void main(String[] args) {
int abc;
int total = 1000;
for (abc = 220000000; abc < 240000000; abc++) {
String string1 = Integer.toString(abc);
int a, b, c;
a = 0;
b = 0;
c = 0;
int a2 = squared(a);
int b2 = squared(b);
int c2 = squared(c);
a = Integer.parseInt(string1.substring(0, 3));
b = Integer.parseInt(string1.substring(3, 6));
c = Integer.parseInt(string1.substring(6, 9));
if (a < b && a < c && b < c && a2 < b2 && b2 < c2 && a + b + c == total) {
System.out.println("The answer is " + abc);
} else {
System.exit(0); // testing
}
}
}
public static int squared(int x) {
return (x * x);
}
}
这是我的代码。我试图让程序打印 abc 的值,以便 a 小于 b,b 小于 c。并且a平方小于b平方,而b平方小于c平方。此外,a+b+c 必须等于 1000。我尝试将 abc 设为一个整数值,并使用子字符串来区分 a、b 和 c。例如 224,356,446。带有子字符串的 An 将使 a=224、b=356 和 c=446。当我运行程序时,没有打印任何内容。由于系统退出,正在调用 else 语句。有人可以帮忙吗?
【问题讨论】:
-
如果
a < b < c则对于任何正值a^2 < b^2 < c^2始终为真。另外:如果a<b和b<c然后a<c,所以你只需要3 次检查:if( a<b && b<c && a+b+c == total)。 -
为什么在给
a, b, c非零值之前分配a2, b2, c2? -
至于 if 语句:想一想如果你还没到最后并且还没有找到答案会发生什么:你真的想马上退出吗?我对此表示怀疑,因此继续循环,直到找到答案 - 在这种情况下,您可以使用
break;退出循环。有了这个,就根本不需要System.exit()。 -
在您弄清楚实际值 a、b 和 c 是什么之前,您正在调用
squared()来获取平方值。 -
顺便说一句,您不需要继续构建字符串:
c = abc % 1000; b = (abc / 1000) % 1000; a = (abc / 1000000) % 1000;。但是在a < b < c之前,您将经历很多迭代。对c进行迭代没有任何意义,只需分配c = total - (a + b);,并相应减少迭代次数。
标签: java for-loop if-statement