Z systemu dziesietnego na system binarny

0

Hej mam prośbe czy ktoś pomoże mi znaleźć błąd ponieważ nie do końca prawdziwe są wyniki liczb dziesietnych na binarne...

//zamiana liczb pobranych z pliku .txt z systemu dziesietnego na binarny
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.*;

public class ZamianaLiczbNaBinarne {

    public static void main(String[] args) throws FileNotFoundException{
        int i;
        File plik = new File("liczby.txt");
        Scanner odczyt = new Scanner(plik);
        int[] liczba = new int[6];
        int[] tab = new int[8];
        for(i=0; i<liczba.length; i++){
            liczba[i] = odczyt.nextInt();
            System.out.printf("%d= ", liczba[i]);
            for(int j=0; j<tab.length; j++){
                tab[j]=liczba[i]%2;
                liczba[i]/=2;
                if(liczba[i]==0){
                    liczba[i]+='0';
                }
                else{
                    liczba[i]+='1';
                }
                System.out.printf("%d", tab[j]);
            }
            System.out.println("\n");
        }
    }

}
0

Może metoda Integer.toBinaryString() ? :)

1

ten kod nie ma sensu za bardzo, przeanalizuj co chcesz zrobic, krok po kroku.
tu masz algorytm http://www.algorytm.edu.pl/fu[...]y-dziesietnej-na-binarna.html
dodatkowe wskazowki:
1) nie trzeba w ogole uzywac tablic
2) napisz osobna metode przyjmujaca int a zwracajaca String
3) mozesz po prostu uzyc Integer.toString(twoje_wejscie, 2); ale pewnie nie o to ci chodzi ;)

0

Zgadzam sie z przedmówcami:), jak Chcesz algorytm do analizy to również jest tutaj: Systemy liczbowe
A Twój kod... To tablicowanie niepotrzebne(ale spoko, nie Lubisz stringów - nie ma problemu:)), ale na sam (skopany:)) algorytm nie wpływa (za bardzo:)), jak Chcesz to naprawić:
To:

 if(liczba[i]==0){
                    liczba[i]+='0';
                }
                else{
                    liczba[i]+='1';
                }

To fail, nie o to chodzi, jak liczba konwertowana będzie zerem, to nalezy zatrzymać algorytm - ten warunek tylko to kontroluje (w rekurencji słuzy jako tzw. "base case") - wynik konwersji jest zapisywany w tablicy tab. Czyli wywalamy to, a wtedy (pozwoliłem sobie wywalić ten input i iterację i wziąc jednoelemntową tablicę):
https://ideone.com/UGcZU3#cmperr
Linia 21 nie działa, czyli wynik (odwrócony! -taki algorytm dziwaczniasty:)) konwersji ósemki jest w pierwszych 4 bitach tego: 00010000, powiedzmy, tak naprawdę elementach tablicy i nie Wiesz, jak go wyciągnąć(akurat teraz Wiesz, bo prosta liczba, ale dla większych nie Będziesz), po odkomentowaniu wydrukuje nam 0001, tak jak powinno. Koniec, ale gdybyś Chciał to jakoś użyć, to tylko te pierwsze elementy należałoby zapisać do jakiejś innej (dynamicznej - bo to będa różne długości) tablicy, odwrócić i gotowe, ufff. Chyba jednak Polubisz stringi:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0