我的任务是说要做以下事项:
Search2:搜索x * x + y * y的解 - 12x -10y + 36 = 0.在x和y中搜索0到10,搜索每个y值,然后移动到下一个x。打印找到的前三个解决方案。 (注意 - 带标签的休息在这里很方便!)
我无法弄清楚这个的逻辑。我想我必须使用2个以上的循环但不确定 这是我到目前为止(它只是重复(6,0)):
for (int j = 0; j <= 10; j++) {
for (int i = 0; i <= 10; i++) {
while (((i * i) + (j * j) - (12 * i) - (10 * j) + 36) == 0) {
System.out.println("(" + i + ", " + j + ")");
}
}
}
UPDATE
这是解决方案:
int t = 0;
for (int i = 0; i <= 10; i++) {
if (t == 3) {
break;
}
for (int j = 0; j <= 10; j++) {
if (((i * i) + (j * j) - (12 * i) - (10 * j) + 36) == 0) {
System.out.println("(" + i + ", " + j + ")");
t++;
}
}
}
答案 0 :(得分:2)
尝试并不错。因为你离我很近,我会告诉你一个有效的解决方案。基本上,你需要做三件事:
while
更改为if
为了清晰起见,我还建议您使用与问题相同的变量名称 - 即x
和y
。
int count = 0;
outerLoop:
for (int y = 0; y <= 10; y++) {
for (int x = 0; x <= 10; x++) {
if (x * x + y * y - 12 * x - 10 * y + 36 == 0) {
System.out.println("(" + x + ", " + y + ")");
if (++count == 3)
break outerLoop;
}
}
}
执行时,此代码生成:
(6, 0)
(3, 1)
(9, 1)
很抱歉用勺子喂你,但这里的部分课程是良好的编码风格和练习。
答案 1 :(得分:0)
你正在使用一个额外的while
循环,它会无限运行。
while (((i * i) + (j * j) - (12 * i) - (10 * j) + 36) == 0) {
System.out.println("(" + i + ", " + j + ")");
}
第一次评估为true时 - 即当它达到(6,0)时 - 它将继续运行,因为i
和j
未被修改。
您需要将其替换为if
。
答案 2 :(得分:0)
仔细看看你内在的while循环。一旦找到方程的解,i
和j
永远不会改变,公式总是计算为0
,导致无限循环。
为清楚起见,将i
和j
重命名为x和y也可能是明智之举。尽管如此,你大部分都在正确的轨道上。不要忘记你只需打印前三个解决方案。
答案 3 :(得分:0)
我不会帮助你很多,因为这是一个非常简单的概念,但想想你需要循环的东西,它可能会更容易使用i或j的x和y instad。也是你的打印(6,0),因为这正是你告诉它用while循环做的。
一个提示,你的while循环应该有一个停止其功能的语句,假设x&lt; 4,如果它更大或=比它将继续在循环之外。
答案 4 :(得分:0)
public class EquationSolver {
public static void main(String[] args) {
int found = 0;
searchSolutions:
for (int y = 0; y <= 10; y++) {
for (int x = 0; x <= 10; x++) {
if (((x * x) + (y * y) - (12 * x) - (10 * y) + 36) == 0) {
System.out.println("(" + x + ", " + y + ")");
found ++;
if (found == 3) {
break searchSolutions;
}
}
}
}
}
}
答案 5 :(得分:0)
很长一段时间我上次写了一些类似的作业......只是为了它的乐趣:)
public class Main {
public static void main(String[] args) {
int[] range = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
boolean isSolutionFound = Boolean.FALSE;
int solCounter = 0;
searchSolutions:
for (Integer y : range) {
for (Integer x : range) {
isSolutionFound = checkForSolution(x, y);
if (isSolutionFound) {
printSolution(x, y);
solCounter++;
}
if (solCounter == 3)
break searchSolutions;
}
}
}
private static void printSolution(Integer x, Integer y) {
System.out.println(x + "," + y); // use some fancy formatting instead
}
private static boolean checkForSolution(int x, int y) {
if (x * x + y * y - 12 * x - 10 * y + 36 == 0)
return true;
else
return false;
}
}
答案 6 :(得分:-2)
for (int j = 0; j <= 10; j++)
{
for (int i = 0; i <= 10; i++)
{
if (((i * i) + (j * j) - (12 * i) - (10 * j) + 36) == 0)
{
System.out.println("(" + i + ", " + j + ")");
return;
}
}
}
要记住return;
部分是重要的,否则您仍会搜索解决方案,尽管您已经找到了解决方案。如果你没有更多的解决方案,那么你应该省略'return'声明。