【问题标题】:nested for loops printing too many values java嵌套for循环打印太多值java
【发布时间】:2014-12-11 05:59:46
【问题描述】:

我有一个基本的问候程序,它应该会根据用户的输入做出响应。我正在尝试使用 for 循环来完成它;然而,每当用户回复存储在不同数组中的“bad”或“you”值时,控制台都会多次打印出相同的响应。如何解决这个问题? 我是这里的菜鸟,在java中。 如果之前已回答此答案,我深表歉意。我搜索但找不到。 感谢您的宝贵时间。

import java.util.Scanner;

public class Greeter {
    public static void main(String[] args) {
        String[] greetings = { "well", "good", "great", "awesome", "fabulous" };
        String[] bad_greetings = { "bad", "awful" };
        String[] responses = { "you", "yourself" };

        System.out.println("Hello there, how are you?");
        String response;
        Scanner scan = new Scanner(System.in);
        response = scan.nextLine();
        for (String greeting : greetings) {
            if (response.contains(greeting)) {
                System.out.println("Well, good for you!");
            }
            for (String b_greet : bad_greetings) {
                if (response.contains(b_greet)) {
                    System.out.println("At least you have me.");
                }
            }
            for (String reply : responses) {
                if (response.contains(reply)) {
                    System.out.println("I'm well, thank you.");
                    // } else {
                    // System.out.println("Let's move on then.");
                    // }

                }
            }
        }

    }
}

【问题讨论】:

    标签: java arrays loops for-loop nested


    【解决方案1】:

    改变你的 Main()。你的问题是你的第一个循环不好 } 我也建议你打破循环(或者而不是 break 使用 return; 从函数)因为如果你已经找到答案,则不需要运行所有循环。

    public static void main(String[] args) {
        String[] greetings = {"well", "good", "great", "awesome", "fabulous"};
        String[] bad_greetings = {"bad", "awful"};
        String[] responses = {"you", "yourself"};
    
        System.out.println("Hello there, how are you?");
        String response;
        Scanner scan = new Scanner(System.in);
        response = scan.nextLine();
        for (String greeting : greetings) {
            if (response.contains(greeting)) {
                System.out.println("Well, good for you!");
                break;//return;
            }
        }
        for (String b_greet : bad_greetings) {
            if (response.contains(b_greet)) {
                System.out.println("At least you have me.");
                break;//return;
            }
        }
        for (String reply : responses) {
            if (response.contains(reply)) {
                System.out.println("I'm well, thank you.");
                break;//return;
                // } else {
                // System.out.println("Let's move on then.");
                // }
    
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      挤奶女工的回答是正确的。为了进一步详细说明他的回复,您将打印您的回复 5 次(“greetings”数组中的每个项目打印一次)。

      我能想到三个解决您问题的方法:

      1. 保留你现在拥有的,但要休息一下;用于终止 for 循环的语句。
      2. 像 Milkmaid 那样拆分你的 for 循环并包含 break。
      3. 将您的数组更改为具有内置“包含”方法的列表。 How can I test if an array contains a certain value?

      选项 3 将是最干净的 :) 您可以即时转换它,也可以完全从一个列表开始。看起来你的程序可以从一个列表开始。

      【讨论】:

        【解决方案3】:

        你可以试试下面

        public static void main(String[] args) {
        String[] greetings = {"well", "good", "great", "awesome", "fabulous"};
        String[] bad_greetings = {"bad", "awful"};
        String[] responses = {"you", "yourself"};
        
        System.out.println("Hello there, how are you?");
        String response;
        Scanner scan = new Scanner(System.in);
        response = scan.nextLine();
        if(Arrays.asList(greetings).contains(response)){
              System.out.println("Well, good for you!");
              break;//return;
        }
        if(Arrays.asList(bad_greetings).contains(response)){
              System.out.println("At least you have me.");
              break;//return;
        }
        if(Arrays.asList(responses).contains(response)){
              System.out.println("I'm well, thank you.");
              break;//return;
        }
         // } else {
         // System.out.println("Let's move on then.");
         // }
        

        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-02-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-04
          • 2012-09-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多