Базовые преобразования - десятичные в восьмеричные

В приведенном ниже коде я пытаюсь преобразовать 15 базовых 10 в его значение в базовых 8, которое равно 17. Но вместо этого программа ниже дает мне 13, а не 17. Метод baseEight получает 15 как string тогда я понимаю, что Integer.parseInt baesEight принимает значение 15 и преобразует его в базовое значение 8, которое должно быть 17. Но это не так. Я не уверен, что это не так.

import acm.program.*;

public class BaseCoversion  extends ConsoleProgran{
  public void run(){

    int a = 15; 
    String a = Integer.toString(a);
    println(a);
  }

  private int baseEight(String s) {
    return Integer.parseInt(s , 8 );
  }

} 

3 ответа

Решение

Чтобы получить восьмеричное представление числа, вам нужно либо передать основание Integer.toString(int, int) метод или использование Integer.toOctalString(int) метод:

int a = 15; 
String s = Integer.toOctalString(a);
System.out.println(Integer.parseInt(s));

Integer.parseInt(String, int) анализирует строку, используя заданное основание Вы этого не хотите. Вывод, который вы запрашиваете, представляет собой просто представление числа в базе 8,

15 в базе 8 на самом деле 13:)

Вы могли бы использовать Integer.toOctalString(number) или использовать yourInteger.toString(8) если вы хотите восьмеричное представление числа в виде строки

Для вашего случая это будет:

int a = 15; 
String s = Integer.toOctalString(a);
println(s);

Что не так, так это то, что parseInt(s,8) анализирует строку ОТ базы 8, а не базы 8.

РЕДАКТИРОВАТЬ: я забыл добавить, что есть Integer.toOctalString, которая, вероятно, функция, которая вам нужна.

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