需要帮助 - 带有int和String的Java if / else语句

时间:2014-10-01 03:35:03

标签: java

这是我的完整代码。我意识到它还没有完成,但我遇到了ISBN参数部分的问题。当我编译时,它说“不兼容的类型”突出显示'返回'不正确的ISBN“;'

class Book{
    private String title;
    private int ISBN;
    private String authorLastName;
    private String authorFirstName;
    private int yearPublished;

   public Book(){
   }

   public Book(String newTitle, int newISBN, String newAuthorLastName, 
   String newAuthorFirstName, int newYearPublished){
       title               = newTitle;
       ISBN                = newISBN;
       authorLastName      = newAuthorLastName;
       authorFirstName     = newAuthorFirstName;
       yearPublished       = newYearPublished;       
   }

   public String setTitle(String newTitle){       
       if(title.length()> 3){
        return title;
       }else{
           return "Title too short.";
       }
   }

   public int setISBN(int newISBN){       
       if((newISBN>=10000) &&(newISBN<=20000)){
           return ISBN;
       }else{
           return "Incorrect ISBN";
       }
   }    
}

如果你们能,我会非常感激!

4 个答案:

答案 0 :(得分:3)

public int setISBN(int newISBN){

表示该方法返回int的数据类型。当你这样写:

return "Incorrect ISBN";

您尝试返回String。你不能这样做。你返回一个整数。

您可能想要做的是返回一个负数,如果它不正确并打印出错误的信息。这样,您就知道不要使用无效的号码,但仍会返回int

像这样,例如:

public int setISBN(int newISBN){       
   if((newISBN>=10000) &&(newISBN<=20000)){
       return ISBN;
   }else{
       System.out.println("Incorrect ISBN"); // print out that it's invalid
       return -1; // should be known that -1 means it's invalid
   }
}

请注意,您的set方法没有意义。 set方法将字段设置为特定值。当您返回某些内容时,应将其称为get方法。

答案 1 :(得分:1)

您在以下方法中返回了错误的值(即String)。

public int setISBN(int newISBN){       
     if((newISBN>=10000) &&(newISBN<=20000)){
         return ISBN;
     }else{
         return "Incorrect ISBN"; // Wrong
     }
}

返回int而不是String

public int setISBN(int newISBN){       
    if((newISBN>=10000) &&(newISBN<=20000)){
        return ISBN;
    }else{
        return newISBN;
    }
}

答案 2 :(得分:0)

嗯,你的函数被声明为返回一个int,但它返回一个字符串。这是一种类型不匹配。

你可以通过使用特殊标志值来解决这个问题,因为&#34;不正确&#34;,比如-1或者其他东西:

public int setISBN(int newISBN){       
    if((newISBN>=10000) &&(newISBN<=20000)){
        return ISBN;
    }else{
        return -1; // or whatever
    }
}

但是,我注意到您正在使用setISBN()之类的验证功能。我建议将其更改为返回boolean并重命名:

public boolean isValidIsbn(int newIsbn){       
    return ((newIsbn>=10000) &&(newIsbn<=20000));
}

如果ISBN有效,则返回true&#34; (根据您的定义)和false如果不是。

答案 3 :(得分:0)

问题出在这里:

public int setISBN(int newISBN){       
       if((newISBN>=10000) &&(newISBN<=20000)){
           return ISBN;
       }else{
           return "Incorrect ISBN"; // must be int
       }
}

您正在返回String,即"Incorrect ISBN"&amp;功能return typeint

因此,返回独特的somwthinh,以确定ISBN值不在10000 to 20000之间,假设返回0&amp;检查那里的值是否为0。如果您将返回类型设置为boolean,则更好。所以它会:

public boolean setISBN(int newISBN){       
       if((newISBN>=10000) &&(newISBN<=20000)){
           return true;
       }else{
           return false;
       }
}