2014-02-24 2 views
0

나는 프로그래밍에 익숙하지 않습니다. 나는이 루프가 훨씬 더 효율적으로 보이도록 루프를 이해한다. 하지만 지금 당장은을 반환하는 방법을 알아야합니다. 나는 그들의 가치에 기초하여 최고의 동물을 찾아야합니다. 가장 높은 값이 반환되어야합니다.(숙제) 실행 중이지만 필요한 값을 반환하지 않음

  • 는 지금 ("대답을") surveyresponse.equals 그래서 그것은 나를 위해 문제를 해결하지 않은 문에 비교에 .equals에 코드를 변경했습니다.

  • 코드는 현재 실행하지만, 단지 대답을 반환합니다.

  • 가장 값이 큰 동물을 돌려 주려면 코드가 필요합니다.
  • 해당 개에 대한 할당 요청은 모든 관계를 얻고 고양이는 항상 타이 브레이커를 잃게됩니다.

    import java.util.Scanner; 
    
    public class PetSurvey{ 
    public static void main(String[] args){ 
        String surveyResponse; 
    String y; 
        int dogScore, catScore, dragonScore, z; 
    dogScore = 0; 
    catScore = 0; 
    dragonScore = 0; 
    z = 0; 
    y = "best animal"; 
    
    Scanner foo = new Scanner(System.in); 
    System.out.print(" What is your favorite pet? "); 
    System.out.print(" a) Dogs "); 
    System.out.print(" b) Cats "); 
    System.out.print(" c) Dragons "); 
    System.out.print(" d) I like cats, dogs and dragons "); 
    surveyResponse = foo.next(); 
    if (surveyResponse == "a"){ 
        dogScore = dogScore + 3;} 
    if (surveyResponse == "b"){ 
        catScore = catScore + 3;} 
    if (surveyResponse == "c"){ 
        dragonScore = dragonScore + 3;} 
    if (surveyResponse == "d"){ 
        dogScore = dogScore + 1; 
        catScore = catScore + 1; 
        dragonScore = dragonScore +1;} 
    
    System.out.print(" What is your favorite pet? "); 
    System.out.print(" a) Dogs "); 
    System.out.print(" b) Cats "); 
    System.out.print(" c) Dragons "); 
    System.out.print(" d) I like cats, dogs and dragons "); 
    surveyResponse = foo.next(); 
    if (surveyResponse == "a"){ 
        dogScore = dogScore + 3;} 
    if (surveyResponse == "b"){ 
        catScore = catScore + 3;} 
    if (surveyResponse == "c"){ 
        dragonScore = dragonScore + 3;} 
    if (surveyResponse == "d"){ 
        dogScore = dogScore + 1; 
        catScore = catScore + 1; 
        dragonScore = dragonScore +1;} 
    
    System.out.print(" What is your favorite pet? "); 
    System.out.print(" a) Dogs "); 
    System.out.print(" b) Cats "); 
    System.out.print(" c) Dragons "); 
    System.out.print(" d) I like cats, dogs and dragons "); 
    surveyResponse = foo.next(); 
    if (surveyResponse == "a"){ 
        dogScore = dogScore + 3;} 
    if (surveyResponse == "b"){ 
        catScore = catScore + 3;} 
    if (surveyResponse == "c"){ 
        dragonScore = dragonScore + 3;} 
    if (surveyResponse == "d"){ 
        dogScore = dogScore + 1; 
        catScore = catScore + 1; 
        dragonScore = dragonScore +1;} 
    
    if (dogScore > z){ 
    z = dogScore;} 
    if (catScore > z){ 
    z = catScore;} 
    if (dragonScore > z){ 
    z = dragonScore;} 
    if (dogScore == catScore){ 
    z = dogScore;} 
    if (catScore == dragonScore){ 
    z = dragonScore;} 
    
    if (z == dogScore){ 
    y = "dog";} 
    if (z == catScore){ 
    y = "cat";} 
    if (z == dragonScore){ 
    y = "dragon";} 
    
    System.out.print(" The most popular pet is: " + y + "."); 
    } 
    
    } 
    

나는 사전에이를 덕분에 어떤 도움을 주셔서 감사합니다.

+3

'=='을 사용하여 문자열 값을 비교하지 마십시오. 'equals()'를 사용하십시오. –

+7

사람들이 ==를 사용하여 문자열을 비교할 때 울부 짖음 – Zeeshan

+0

이 질문을 확인하십시오 [Java의 문자열을 어떻게 비교합니까?] (http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in- java) – Zeeshan

답변

1

문제는 코드 끝의 점수를 비교하는 방식과 관련이있는 것으로 보입니다. (개 모든 관계를 승리로) (고양이가 모든 관계를 상실로) 다음과 같이

당신은 크게 먼저 다른 사람에게 개 점수를 비교하여 일을 단순화 할 수는, 다음, 고양이 점수 용 점수를 비교 :

if (dogScore >= catScore && dogScore >= dragonScore) { 
    y = "dog"; 
} 
else if (dragonScore >= catScore) { 
    y = "dragon"; 
} 
else { 
    y = "cat"; 
} 

이렇게하면 z을 완전히 없애고 각 동물의 실제 점수를 비교하는 데 집중할 수 있습니다.

이 정보가 도움이되었지만 명확하지 않은 경우 알려 주시기 바랍니다.

+0

이것은 엄청난 도움이되었습니다. 내가 실행중인 정확한 문제를 확인했습니다. 정말 고맙습니다. 그것은 완전한 의미를 갖습니다. 정말 코드를 단순화하기 위해 작업을 시작해야합니다. –

+0

너무 많이 자신을 때리지 마라, 우리 모두는 한 번에 한 번씩 코드 작성을 배웠다 :) –

1

코드에 세 가지 문제가 있습니다.

첫 번째 것은 이미 Martin의 적용을 받았습니다.

두 번째는 ==를 사용하여 문자열을 비교한다는 것입니다. 이것은 문자열이 실제로 동일한 String 객체인지, 문자열이 동일한 값을 갖는지 검사하지 않습니다. surveyResponse.equals("a")을 사용해야합니다.

세 번째는 이미 중복 코드에서 자신을 식별 한 것입니다. 루프로 변환하는 것이 올바른 방법입니다.

0

잘못 작동하게하는 코드에는 두 가지 중요한 문제가 있습니다. 우선, '=='를 사용하여 Java에서 오브젝트를 비교할 수 없습니다 (오브젝트 참조를 비교 함). 대신 equals를 사용하십시오 (이전에 사람들이 지적한 것처럼).

둘째, 'z'선택에 결함이 있습니다. dogScore == catScore는, z는 이미 개를 가리키는 경우 다음 줄이 필요 그래서

if (dogScore > z){ 
z = dogScore;} 
if (catScore > z){ 
z = catScore;} 
if (dragonScore > z){ 
z = dragonScore;} 

여기 Z 점을 먼저 가장 높은 점수는, 또한 그들은 당신의 논리를 깰 수 있습니다.

if (dogScore == catScore){ 
z = dogScore;} 

사람 위와

if (catScore == dragonScore){ 
z = dragonScore;} 

같은 (dogScore == 0과 catScore == 0으로) 모든 quiestions 드래곤을 선택한 경우는, dogScore Z에서 변경되지만, Z는 dragonScore 것 누군가 항상 개를 골랐다면.

관련 문제