我是Java的新手,请原谅我,如果这是一个愚蠢的问题。
首先,我做了以下操作(这是我的代码中的一部分):
public static void team()
{
int score = JOptionPane.showInputDialog("Enter the team score...");
calculate(score);
}
但我不断收到错误说:“不兼容的类型字符串无法转换为int”。 所以我想我可能需要使用解析。我做了以下工作并且有效:
public static void team()
{
int myScore;
String score = JOptionPane.showInputDialog("Enter the team score...");
myScore = Integer.parseInt(score);
calculate(myScore);
}
我想知道为什么我需要解析变量“得分”?在第一段代码中,我将变量分数声明为整数,因此它不会存储我期望在变量分数中作为整数的输入,然后将其传递给方法计算。我知道解析是将String转换为Integer的时候。但是在这种情况下,我不希望用户输入字符串,为什么需要解析?
答案 0 :(得分:2)
原因很简单:因为JOptionPane.showInputDialog()
returns a String,无论您实际想要用户输入什么内容。
Java中没有基于目标变量类型myScore
进行自动转换的机制(尽管其他一些语言也可以这样做,例如Scala中的implicit conversions)。
您可以(原则上)创建一个返回int
的自定义对话框,例如通过让用户从下拉列表中选择数字,然后不需要解析。但除此之外,你必须明确解析。
答案 1 :(得分:1)
因为字符串的存储方式与整数不同。整数以二进制形式存储,而String则是一组字符。
实施例: 数字14将以二进制存储为1110。但是,作为String,它存储为00110001 00110100
看看这个http://www.roubaixinteractive.com/PlayGround/Binary_Conversion/The_Characters.asp
Integer.parseInt()基本上通过查找查找表中的字符为您完成脏工作,并且只要它们与正确的整数值相关联,它就会将其转换为二进制形式,以便存储在整数。
答案 2 :(得分:1)
JOptionPane.showInputDialog("Enter the team score...");
返回您尝试存储在int中的String。这就是为什么你得到“不兼容的类型”
有关详细信息,请参阅Javadocs。