Переменные, возвращающие неверные значения int - PullRequest
0 голосов
/ 31 октября 2019

Кодировал следующие строки с целью вставки 2 значений в диалоговое окно и присвоения 2 различным переменным. Допустим, я вставил 22, тогда он должен отображаться как 2x2 = 4 в textField, вместо этого он печатает что-то вроде 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;
}

Результаты:

Результат ввода "22".

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Функция charAt(index) возвращает символ, который вы затем косвенно анализируете в int. Значение int, равное 2, равно 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
}
0 голосов
/ 31 октября 2019

Вы рассматриваете персонажа (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...