我正在尝试解决数字数组和Java中用于循环的3个问题。它涉及找出数组中的哪个3个数字加起来为一个特定的总和。对于此测试,我使用了9的总和。
int nums[] = {1, 3, 5, 7, 9, 11, 13, 15};
for (int i = 0; i <= 7; i++) {
for (int j = 0; j <= 7; j++)
for (int y = 0; y <= 7; y++)
if(nums[i] + nums[j] + nums[y] == 9)
System.out.print(i + " " + j + " " + y);
}
正确答案是3 3 3,但是此输出显示为:
0 0 30 1 20 2 10 3 01 0 21 1 11 2 02 0 12 1 03 0 0
我知道我可能将for循环嵌套完全错误,但是我不弄清楚if语句范围内的变量之一就无法弄清楚将代码块放置在哪里。谢谢你的帮助。
答案 0 :(得分:1)
代码中的某些问题
System.out.print(i + " " + j + " " + y);
,而不要打印数字。println
在换行符上打印所有内容1,3,5
更新后的代码将是
for (int i = 0; i <= 7; i++) {
for (int j = i+1; j <= 7; j++)
for (int y = j+1; y <= 7; y++)
if( nums[i] + nums[j] + nums[y] == 9)
//Print the numbers on newline
System.out.println(nums[i] + " " +nums[j] + " " + nums[y]);
}
输出将为
1 3 5
如果允许重复,则所有3个循环都将从0开始运行,并且答案更改
for (int i = 0; i <= 7; i++) {
for (int j = 0; j <= 7; j++)
for (int y = 0; y <= 7; y++)
if( nums[i] + nums[j] + nums[y] == 9)
//Print the numbers on newline
System.out.println(nums[i] + " " +nums[j] + " " + nums[y]);
}
答案将是
1 1 7
1 3 5
1 5 3
1 7 1
3 1 5
3 3 3
3 5 1
5 1 3
5 3 1
7 1 1
答案 1 :(得分:0)
正确答案是3 3 3,但是此输出显示为:
否,正确的答案肯定不是3 3 3
,因此,如果我没记错,您想找到一个三元组,加起来等于您的测试总和,在这种情况下为9,所以正确的答案为1, 3,5
试试这个:
for (int i = 0; i <= 7; i++) {
for (int j = i + 1; j <= 7; j++)
for (int y = j + 1; y <= 7; y++)
if (nums[i] + nums[j] + nums[y] == 9)
System.out.print(nums[i] + " " + nums[j] + " " + nums[y]);
}
答案 2 :(得分:0)
您要多次测试相同的值,即正在测试1 + 1 + 7、1 + 7 + 1、7 + 1 + 1。使用for for (int j = i; j <= 7; j++)
和for (int y = j; y <= 7; y++)
。请注意,有多个答案,而不仅仅是3 3 3,如果您允许多次使用值。