为了账号安全,请及时绑定邮箱和手机立即绑定

如何将多个for循环构造成一个if语句?

如何将多个for循环构造成一个if语句?

慕田峪9158850 2022-12-15 14:42:58
我正在尝试用 Java 中的数字数组和 3 个 for 循环解决问题。它涉及计算出数组中的哪 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 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

您的代码中的一些问题

  • 您正在打印索引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 


查看完整回答
反对 回复 2022-12-15
?
慕容3067478

TA贡献1773条经验 获得超3个赞

您多次测试相同的值,即 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 。



查看完整回答
反对 回复 2022-12-15
?
LEATH

TA贡献1936条经验 获得超7个赞

正确答案是 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


查看完整回答
反对 回复 2022-12-15
  • 3 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号