变量返回错误的 int 值
Variables returning wrong int values
为了将 2 个值插入对话框并分配给 2 个不同的变量,对以下行进行了编码。假设我插入 22,它应该在 textField 中显示为 2x2 = 4,相反,它打印出类似 50 x 50 = 2500.
的内容
String a = JOptionPane.showInputDialog("Qual cálculo deseja fazer? (AB = A x B)", "AB");
aNum = a.charAt(0);
bNum = a.charAt(1);
int cNum = aNum*bNum;
Game.getNumbers(aNum, bNum);
JOptionPane.showInputDialog(aNum, bNum);
TF1.setText(Game.First() +" x "+ Game.Second() +" = "+ cNum);
类 涉及:
public class Game1 {
private int first = 0;
private int second = 0;
private int score = 0;
private int hiScore = 0;
public void numTotalCheck(int a){
String option1 = null;
char option = 0;
do{
if (a == (first*second)){
JOptionPane.showMessageDialog(null, "Parabéns. Você acertou!");
score = score + 100;
if(score > hiScore){
hiScore = score;
}
}else{
score = score - 100;
if(score > hiScore){
hiScore = score;
}
JOptionPane.showMessageDialog(null, "Errado!");
option1 = JOptionPane.showInputDialog("Deseja jogar novamente? <S/N>");
option = option1.charAt(0);
}
}while((option == 's') || (option == 'S'));
}
public void getNumbers(int a, int b){
first = a;
second = b;
}
public int First(){
return first;
}
public int Second(){
return second;
}
结果:
Result of "22" input.
您将字符 (char
) 视为数字 (integer
)。这是一个隔离您所看到的内容的示例。
此代码采用字符串值“2”并从中获取一个字符,然后打印该字符。
char c = "2".charAt(0);
System.out.println("c: " + c);
--> c: 2
如果您尝试同样的事情,但将结果存储为 int
,则存储的值不是同一件事,而是“50”:
int i = "2".charAt(0);
System.out.println("i: " + i);
--> i: 50
在幕后,任何字符值都是用数字表示的,因此字符“2”是整数 50。您可以挖掘 ASCII 图表以查看它们是如何映射的。
有很多方法可以修复您的代码,但由于您已经从字符串值开始,获得正确结果的一种方法是使用 Integer.parseInt()
,如下所示:
int parsedValue = Integer.parseInt("2");
System.out.println("parsedValue: " + parsedValue);
--> parsedValue: 2
函数 charAt(index)
returns 一个 char,然后隐式解析为一个 int。 '2'的int值是50,所以是50 * 50 = 2500.
一个简单的解决方法是请求输入格式,如 A;B。然后您可以执行以下操作:
String s =JOptionPane.showInputDialog("Enter two numbers like this: Number A;Number B", "AB");
String[] temp = s.split(";");
if(temp.length == 2) {
try {
int aNum = Integer.parseInt(temp[0]);
int bNum = Integer.parseInt(temp[1]);
int cNum = aNum*bNum;
} catch(NumberFormatException nfe) {
// One or both of the values weren't ints.
}
} else {
// Some error here, because of too few/ too many values
}
为了将 2 个值插入对话框并分配给 2 个不同的变量,对以下行进行了编码。假设我插入 22,它应该在 textField 中显示为 2x2 = 4,相反,它打印出类似 50 x 50 = 2500.
的内容String a = JOptionPane.showInputDialog("Qual cálculo deseja fazer? (AB = A x B)", "AB");
aNum = a.charAt(0);
bNum = a.charAt(1);
int cNum = aNum*bNum;
Game.getNumbers(aNum, bNum);
JOptionPane.showInputDialog(aNum, bNum);
TF1.setText(Game.First() +" x "+ Game.Second() +" = "+ cNum);
类 涉及:
public class Game1 {
private int first = 0;
private int second = 0;
private int score = 0;
private int hiScore = 0;
public void numTotalCheck(int a){
String option1 = null;
char option = 0;
do{
if (a == (first*second)){
JOptionPane.showMessageDialog(null, "Parabéns. Você acertou!");
score = score + 100;
if(score > hiScore){
hiScore = score;
}
}else{
score = score - 100;
if(score > hiScore){
hiScore = score;
}
JOptionPane.showMessageDialog(null, "Errado!");
option1 = JOptionPane.showInputDialog("Deseja jogar novamente? <S/N>");
option = option1.charAt(0);
}
}while((option == 's') || (option == 'S'));
}
public void getNumbers(int a, int b){
first = a;
second = b;
}
public int First(){
return first;
}
public int Second(){
return second;
}
结果:
Result of "22" input.
您将字符 (char
) 视为数字 (integer
)。这是一个隔离您所看到的内容的示例。
此代码采用字符串值“2”并从中获取一个字符,然后打印该字符。
char c = "2".charAt(0);
System.out.println("c: " + c);
--> c: 2
如果您尝试同样的事情,但将结果存储为 int
,则存储的值不是同一件事,而是“50”:
int i = "2".charAt(0);
System.out.println("i: " + i);
--> i: 50
在幕后,任何字符值都是用数字表示的,因此字符“2”是整数 50。您可以挖掘 ASCII 图表以查看它们是如何映射的。
有很多方法可以修复您的代码,但由于您已经从字符串值开始,获得正确结果的一种方法是使用 Integer.parseInt()
,如下所示:
int parsedValue = Integer.parseInt("2");
System.out.println("parsedValue: " + parsedValue);
--> parsedValue: 2
函数 charAt(index)
returns 一个 char,然后隐式解析为一个 int。 '2'的int值是50,所以是50 * 50 = 2500.
一个简单的解决方法是请求输入格式,如 A;B。然后您可以执行以下操作:
String s =JOptionPane.showInputDialog("Enter two numbers like this: Number A;Number B", "AB");
String[] temp = s.split(";");
if(temp.length == 2) {
try {
int aNum = Integer.parseInt(temp[0]);
int bNum = Integer.parseInt(temp[1]);
int cNum = aNum*bNum;
} catch(NumberFormatException nfe) {
// One or both of the values weren't ints.
}
} else {
// Some error here, because of too few/ too many values
}