2015-02-06 19 views
8

Konvertieren einer Basis 10-Nummer in eine Basis 3-Nummer mit einer Methode int-Konverter (int num).Konvertieren einer Basis 10-Nummer in eine Basis 3-Nummer

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(); 
} 

Es wurde Compilation abgeschlossen. Aber als ich versuchte, es auszuführen und eine Nummer eingegeben, zeigte es, dass java.lang.NumberFormatException: Für Eingabezeichenfolge: "strcvt" Ich weiß nicht, wie Sie es beheben. Wie kann ich dies tun, ohne String zu verwenden?

+0

Wollten Sie die Variable 'strcvt' in der' parseInt' Methode verwenden? Ihr Code übergibt derzeit die Literalzeichenfolge "strcvt". –

+0

Was haben Sie von dieser Zeile erwartet? 'Integer.parseInt (" strcvt ");' –

+0

Ich war in einer Messe @^@ – AliceBobCatherineDough

Antwort

7

Sie sollten nicht String überhaupt verwenden müssen.

Versuchen Sie stattdessen

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

Hinweis: Die Zahlen in den Computer sind immer nur N-Bit-d 32-Bit- oder 64-Bit-das heißt, sie binär sind. Was Sie jedoch tun können, ist eine Nummer zu erstellen, die beim Drucken auf Basis 10 tatsächlich die Nummer in Basis 3 ist.

+0

Vielen Dank !! – AliceBobCatherineDough

+1

@PeterLawrey, 'asBase3 (3);' druckt "1" anstelle von "10". –

+0

@SedatPolat Ich habe das korrigiert. –

3

Sie sind nicht variabel String strcvt erklärt, daß anstelle wegen Tippfehler Fehler, den Sie verwendet haben, als "strcvt"

Änderung

answer = Integer.parseInt("strcvt"); 

zu

answer = Integer.parseInt(strcvt); 
1

Sie haben den Wert von strcvt zu analysieren nicht die Zeichenfolge "strcvt"

Sie müssen also die doppelten Werte entfernen answer = Integer.parseInt(strcvt); Und definieren Sie die Variable strcvt außerhalb der Schleife. Sie den Code ändern:

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

Danke !! Es klappt! Aber die Antwort, die ich bekam, war falsch. Ich muss meine Logik überprüfen. – AliceBobCatherineDough

3

"Basis 3 Nummer" und "Basis 10 Nummer" sind die gleiche Nummer. In der Methode int converter(int num) ändern Sie die Nummer, obwohl Sie nur die Darstellung ändern müssen. Schauen Sie sich parseInt(String s, int radix) und toString(int i, int radix), das sollte Ihnen helfen.