Изменить с базы 9 на базу десять

Я изучаю Java с основ, и я поставил перед собой первоначальную цель создать базовый сменщик самостоятельно, но я потерян в этом:

когда это будет делать: numero=numero+(mult*c) изначально номер 0, c является 4 а также mult является 1 а затем следующий номер становится 52 вместо 4, может быть, я смешиваю Strings и Int?

 public class nintodec {
    public static void main(String[] args) {
        int number;
        System.out.println("enter base nine number");
        number = 1234;
        int num = number;
        String cadena = "";
        int numero = 0;
        cadena = String.valueOf(num);
        cadena = Integer.toString(num);
        String reverse = new StringBuffer(cadena).reverse().toString();
        int mult = 1;
        for (int i = 0; i < reverse.length(); i++) {
            char c = reverse.charAt(i);
            System.out.println("  c:" + c + "  mult:" + mult);
            numero = numero + (mult * c);
            System.out.println("   numero" + numero);
            mult = mult * 9;
        }
        System.out.println(numero);

        //when its gonna do: `numero=numero+(mult*c)` initially numero is 0, c is 4 and mult is 1 and then next numero becomes 52 instead of 4

любая помощь, пожалуйста?

3 ответа

Хорошо для изучения Java, продолжайте в том же духе! В любом случае, ваша проблема в том, что c не является 4 но '4', символ ASCII со значением 52. Вам необходимо преобразовать его в int.

Кроме того, вам действительно не нужны строки, чтобы решить эту проблему, попробуйте использовать модульную арифметику, это будет намного чище.

Просто чтобы коснуться вопроса, почему c является 52 вместо 4:

В соответствии

   numero = numero + (mult * c);

c это персонаж, так c на самом деле '4' но нет 4, Вы должны взять целочисленный эквивалент character 4 ('4')

Самый быстрый способ сделать это, вычитая 48(Значение ASCII 0), потому что когда вы подписываетесь '0' от '4' то есть

    '4' - '0'

даст вам компенсацию '4' от '0' что эквивалентно смещению 4 от 0, который 4,

Таким образом, ваша строка будет изменена на:

       numero = numero + (mult * (c-48));

Бесплатный совет: есть лучшие способы сделать то, что вы пытаетесь сделать, так как вы учитесь, вы пытаетесь выполнить это, а затем попытаться реализовать лучше.

Что такое значение ASCII char c = '4'? Это 52. Вам нужно преобразовать его обратно в целое число.

int value = (int)c.charValue();

numero = numero + (mult * c);
System.out.println("   numero" + numero);
mult = mult * 9;

Это буквально переводится как:

0 = 0 + (1 * 52), так как значение ascii символа c = '4' это 52.

Переведите эту строку: numero = numero + (mult * c) в: numero = numero + (mult * value) где значение является выражением int value = (int)c.charValue();

int value = (int)c.charValue(); взято с пользователя SLaks из этого вопроса.

Другие вопросы по тегам