如何构造多个for循环到if语句中?

时间:2019-05-25 17:56:54

标签: java for-loop

我正在尝试解决数字数组和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语句范围内的变量之一就无法弄清楚将代码块放置在哪里。谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

代码中的某些问题

  • 您要打印索引System.out.print(i + " " + j + " " + y);,而不要打印数字。
  • 您要使用println在换行符上打印所有内容
  • 您不应多次从列表中取出一项,每个内部循环都应忽略外部循环已经考虑的元素
  • 3,3,3不是答案,因为它包含重复的元素,答案应该是包含不同元素的答案,即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]);
}

运行示例:https://ideone.com/5UAuGv

答案 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,如果您允许多次使用值