2015-02-06 18 views
8

Bir temel 10 numarayı bir yöntem int dönüştürücüsüyle (int num) temel 3 numaraya dönüştürme.Taban 10 numara bir tabana dönüştürün 3 sayı

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

Derleme tamamlandı. Ama çalıştırmayı denediğimde ve bir sayı girdiğinde, bu java.lang.NumberFormatException gösterdi: Giriş dizesi için: "strcvt" Bunu nasıl düzelteceğimi bilmiyorum. Bunu string kullanmadan nasıl yapabilirim?

+0

'parseInt' yönteminde' strcvt' değişkenini kullanmak mı istiyorsunuz? Kodunuz şu anda "strcvt" değişmez dizgisini geçiriyor –

+0

Bu satırdan ne bekliyordunuz? "Integer.parseInt (" strcvt "); –

+0

Ben bir karışıklık oldu @^@ – AliceBobCatherineDough

cevap

7

Sen hiç dize kullanmak gerekmez.

yerine bu

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

Not deneyin: Bilgisayarda sayılar sadece hiç N-bit yani 32 bit veya 64 bit yani onlar ikilidir. Bununla birlikte, yapabileceğiniz şey, temel 10'da yazdırıldığında aslında taban 3'teki sayı olarak görünecektir.

+0

Çok teşekkür ederim! – AliceBobCatherineDough

+1

@PeterLawrey, asBase3 (3); "10" yerine "1" basar. –

+0

@SedatPolat Bunu düzelttim. –

3

değişken yazım hatası hata için kullandığınız yerine nedeniyle, String strcvt ilan kullanmayan değişiklik

"strcvt" olarak

answer = Integer.parseInt("strcvt"); 

answer = Integer.parseInt(strcvt); 
1

için Sen strcvt değerini ayrıştırmak zorunda "strcvt" dizgisi değil "

Dolayısıyla, çift qoute'u kaldırmanız gerekiyor answer = Integer.parseInt(strcvt); Ve döngü dışında strcvt değişkenini tanımlayın. için size kodunu değiştirmek :

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

Teşekkürler! İşe yarıyor! Ama aldığım cevap yanlıştı. Mantığımı kontrol etmeliyim. – AliceBobCatherineDough

3

"3 numaralı taban" ve "10 numaralı baz numarası" aynı sayıdır. int converter(int num) yönteminde numarayı değiştiriyorsunuz, ancak yalnızca gösterimi değiştirmeniz gerekiyor. parseInt(String s, int radix) ve toString(int i, int radix)'a bakın, bu size yardımcı olmalıdır.

İlgili konular