英文:
How to fix 'Incompatible types' error when converting String to int in Java?
问题
I'm teaching myself java and I came across this error. I'm trying to enter a number of a month and I have to use a switch case to return the "answer". I get the following error:
package javauebung5;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Type Number for name of month");
int monthNumber = scanner.nextInt();
String monthName = determineNameofMonth(monthNumber); // Storing the result in a String
}
private static String determineNameofMonth(int monthNumber) {
switch (monthNumber) {
case 1: return "January";
case 2: return "February";
case 3: return "March";
case 4: return "April";
case 5: return "May";
case 6: return "June";
case 7: return "July";
case 8: return "August";
case 9: return "September";
case 10: return "October";
case 11: return "November";
case 12: return "December";
}
return "Invalid Month";
}
}
This is the error:
Incompatible types. Found: 'java.lang.String', required: 'int'
英文:
I'm teaching myself java and I came across this error. I'm trying to enter a number of a month and I have to use a switch case to return the "answer". I get the follow error:
package javauebung5;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Type Number for name of month");
int monthNumber = scanner.nextInt();
monthNumber = determineNameofMonth(monthNumber);
}
private static String determineNameofMonth(int monthNumber) {
switch (monthNumber) {
case 1: return "January";
case 2: return "February";
case 3: return "March";
case 4: return "April";
case 5: return "May";
case 6: return "June";
case 7: return "July";
case 8: return "August";
case 9: return "September";
case 10: return "October";
case 11: return "November";
case 12: return "December";
}
return "Invalid Month";
}
}
This is the error:
> Incompatible types. Found: 'java.lang.String', required: 'int'
答案1
得分: 1
monthNumber = determineNameofMonth(monthNumber);
根据其声明和意图,determineNameofMonth返回一个String。在这里,您尝试分配给一个整数;错误消息告诉您,整数变量需要一个整数值。
可以使用类似以下方式:
String monthName = determineNameofMonth(monthNumber);
(我假设您随后想编写代码来打印出monthName,否则您对计算结果没有任何操作)。
英文:
monthNumber = determineNameofMonth(monthNumber);
Per its declaration and intent, determineNameofMonth returns a String. Here you attempt to assign to an integer; the error message is telling you that an integer variable requires an integer value.
Use something like:
String monthName = determineNameofMonth(monthNumber);
(I assume you'll then want to write code to print out monthName, otherwise you're doing nothing with the result of the computation).
答案2
得分: 0
monthNumber
是一个变量,它已声明为类型 int
,这个类型在变量的生命周期中保持不变(在Java中无法更改变量的类型)。这意味着 monthNumber
保证只能包含 int
值,而编译器会拒绝编译代码,除非可以百分之百确保这个规则得到遵守。
determineNameofMonth(monthNumber)
是类型为 String
的,因为方法 determineNameofMonth
已经声明为返回 String
类型。String
不是 int
,所以你不能这样做。
可能你想要的是:
String monthName = determineNameofMonth(monthNumber);
也就是创建一个新的变量。monthNumber
这个名称不应该表示一个 名称,否则变量的命名不当。
请注意,你其实不需要这样做,Java 已经有了 Month
:
import java.time.Month;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Type Number for name of month");
int monthNumber = scanner.nextInt();
Month m = Month.of(monthNumber);
System.out.println("You chose: " + m);
}
英文:
>
> int monthNumber = scanner.nextInt();
> monthNumber = determineNameofMonth(monthNumber);
>
monthNumber
is a variable. It has been declared to be of type int
- and that is for the lifetime of that variable (you can't 're-type' a variable in java). That means monthNumber
is guaranteed to never hold anything that isn't an int
value, and the compiler will refuse to compile code unless it can be 100% certain that rule holds.
determineNameofMonth(monthNumber)
is of type String
, because the method determineNameofMonth
has been declared as such. String
is not an int, so, you can't do this.
Presumably you want:
String monthName = determineNameofMonth(monthNumber);
i.e. make a new variable. The name monthNumber
shouldn't hold a name - then the variable is misnamed.
Note that you don't need to do this stuff, java already has Month
:
import java.time.Month;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Type Number for name of month");
int monthNumber = scanner.nextInt();
Month m = Month.of(monthNumber);
System.out.println("You chose: " + m);
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论