Изменить с базы 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 из этого вопроса.