2015-02-06 8 views
8

Jak przekonwertować liczbę podstawową 10 na liczbę podstawową 3 za pomocą metody int converter (int num).Konwersja numeru podstawowego 10 na numer bazowy 3

import java.util.Scanner; 

public class BaseConverter { 
    int answer; 
    int cvt = 0; 
    while (num >= 0) { 
     int i = num/3; 
     int j = num % 3; 
     String strj = Integer.toString(j); 
     String strcvt = Integer.toString(cvt); 
     strcvt = strj + strcvt; 
     num = i; 
     break; 
    } 
    answer = Integer.parseInt("strcvt"); 
    return answer; 
} 

public static void main(String[] agrs) { 
    Scanner in = new Scanner(System.in); 
    System.out.println("Enter a number: "); 
    int number = in.nextInt(); 
    System.out.print(converter(number)); 
    in.close(); 
} 

To była kompilacja zakończona. Ale kiedy próbowałem go uruchomić i wprowadziłem numer, okazało się, że java.lang.NumberFormatException: Dla ciągu wejściowego: "strcvt" Nie wiem jak to naprawić. Jak mogę to zrobić bez użycia ciągu?

+0

Czy chciałeś użyć zmiennej 'strcvt' w metodzie' parseInt'? Twój kod obecnie przekazuje literalny ciąg "strcvt" –

+0

Czego oczekujesz od tej linii? 'Integer.parseInt (" strcvt ");' –

+0

Byłem w rozsypce @^@ – AliceBobCatherineDough

Odpowiedz

7

Nie powinieneś używać String w ogóle.

Spróbuj zamiast

public static long asBase3(int num) { 
    long ret = 0, factor = 1; 
    while (num > 0) { 
     ret += num % 3 * factor; 
     num /= 3; 
     factor *= 10; 
    } 
    return ret; 
} 

Uwaga: Liczby w komputerze są zawsze tylko N-bitowy to 32-bitowe lub 64-bitowe to oni są binarne. Możesz jednak utworzyć numer, który po wydrukowaniu w bazie 10 będzie wyglądał na numer w bazie 3.

+0

Dziękuję bardzo! – AliceBobCatherineDough

+1

@PeterLawrey, 'asBase3 (3);' wypisuje "1" zamiast "10". –

+0

@SedatPolat Poprawiłem to. –

3

nie używasz zmienna zadeklarowana String strcvt, zamiast ze względu na typo omyłkowo użyłeś jako "strcvt"

zmiana

answer = Integer.parseInt("strcvt"); 

do

answer = Integer.parseInt(strcvt); 
1

Trzeba przeanalizować wartość strcvt nie ciąg "strcvt"

Musisz więc usunąć podwójne pytania answer = Integer.parseInt(strcvt); Zdefiniuj zmienną strcvt poza pętlą. zmień kod na:

public static int converter(int num) { 
    int answer; 
    int cvt = 0; 
    String strcvt = null ; 
    while (num >= 0) { 
     int i = num/3; 
     int j = num % 3; 
     String strj = Integer.toString(j); 
     strcvt = Integer.toString(cvt); 
     strcvt = strj + strcvt; 
     num = i; 
     break; 
    } 
    answer = Integer.parseInt(strcvt); 
    return answer; 
} 
+0

Dzięki! To działa! Ale odpowiedź, którą otrzymałem, była błędna. Muszę sprawdzić moją logikę. – AliceBobCatherineDough