有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java(家庭作业)正在运行,但未返回所需的值

我对编程很陌生。我知道循环会使这看起来更有效。但是现在,我只需要弄清楚如何返回正确的值。 我需要根据它们的价值找出最好的动物。应返回最大值

  • 我已将代码更改为。在语句中比较时等于,因此现在测量响应。等于(“回答”)它没有为我解决问题

  • 代码当前正在运行,但只返回dragon作为答案

  • 我需要代码来返回具有最高值的动物
  • 任务要求狗赢得所有平局,而猫总是输掉平局

    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) 个答案

  1. # 1 楼答案

    代码中有三个独立的问题

    马丁已经报道了第一个问题

    第二个是使用==比较字符串。这将检查字符串是否实际上是相同的字符串对象,而不是字符串是否具有相同的值。您应该使用surveyResponse.equals("a")

    第三,您已经在重复代码中标识了自己。转换为循环是正确的前进方向

  2. # 2 楼答案

    您的代码有两个主要问题导致其无法正常工作。首先,您不能使用“==”来比较Java中的对象(这会比较对象引用),而是使用equals(正如人们前面指出的)

    其次,你对“z”的选择是错误的

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

    这里z指向第一个最高的分数,如果dogScore==catScore,z已经指向dog,所以下面的行是不必要的,而且它们打破了您的逻辑

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

    这将改变z为dogScore,如果用户在所有的静止状态下都选择了dragon(dogScore==0和catScore==0)

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

    和上面一样,但若有人总是挑选狗,z将是龙的分数

  3. # 3 楼答案

    您的问题可能与代码末尾比较分数的方式有关

    通过先将狗的得分与其他人进行比较(因为狗赢得了所有的比赛),然后将龙的得分与猫的得分进行比较(因为猫失去了所有的比赛),你可以大大简化事情,如下所示:

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

    这样,你就可以完全摆脱z,只需专注于比较每只动物的实际得分

    我希望这有帮助,但如果不清楚,请告诉我