2014-12-11 4 views
0

사용자의 입력을 기반으로 응답을 내놓을 기본 인사말 프로그램이 있습니다. 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."); 
        // } 

       } 
      } 
     } 

    } 
} 

답변

0

주()를 변경하십시오. 귀하의 문제는 당신이 나쁘다} 첫 번째 루프 또한 나는 당신이 사이클을 깰 (또는 break 대신 return; 함수에서) 당신이 이미 답변을 찾을 수있는 모든주기를 실행하는 데 필요하지 않기 때문에 recommand 좋습니다.

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."); 
      // } 

     } 
    } 
} 
0

밀크 메이드 답이 맞습니다. 응답에 대해 더 자세히 설명하려면 응답을 5 번 인쇄하십시오 ("인사말"배열의 각 항목에 하나씩). 나는 당신의 문제를 해결하기 위해 세 가지 옵션의

을 생각할 수 있습니다 :

  1. 당신은 지금 무엇을 유지하지만, 휴식을 사용합니다; statement for 루프를 중단하십시오.
  2. 밀크 메이드가 한 것처럼 루프를 나눠서 나누기를 포함하십시오.
  3. "contains"메서드가 내장 된 목록 대신 배열을 변경하십시오. How can I test if an array contains a certain value?

옵션 3 당신은 즉시 변환하거나 아예 목록을 시작할 수 있습니다 :) 깨끗한 것입니다. 당신의 프로그램이 목록으로 시작할 수있는 것처럼 보입니다.

0

당신은

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."); 
// } 

}

아래에 시도 할 수 있습니다
관련 문제