Zamiana bin na dec

0

Witam.
Napisalem krótki program, ktory ma pobrac liczbe i zamienic ja na binarny a potem wyswietlic, cos jednak nie działa
Wydaje mi sie ze to cos z wyswietleniem tablicy, bo jak w petli while dodam wyswietlenie reszty to normalnie pokazuje, tylko while działa do końca tablicy(50 razy), pytanie czemu?

import java.util.Scanner;

public class Poli 
{

	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);
		
		System.out.println("Podaj liczbe do zamiany: ");
		int liczba = in.nextInt();
		
		int[] tab = new int[50];
		int i=0,reszta;
		
		try{
		while(liczba>=0)
		{
			reszta = liczba%2;
			tab[i] = reszta;
			liczba = (liczba-reszta)/2;
			i++;
		}
		
		System.out.print("Liczbe " + liczba + " w postaci binarnej przedstawimy jako: ");
		for(i=tab.length-1; i>0; i--)
		{
			System.out.print(tab[i]);
		}

		}catch(ArrayIndexOutOfBoundsException e){System.out.println("\nZakres z poza tablicy!");}

		in.close();
	}

}

I małe pytanko, czy java oferuje taka metodę ktora zamienia nam jakas liczbe na bin? Pewnie tak, tylko nie moge znalezc :)

pozdrawiam!

0

, pytanie czemu?

Żartujesz sobie? :|

for(i=tab.length-1; i>0; i--)

Przeczytaj to sobie wyraźnie na głos.

0

Generalnie na poczatku ta linia wygladala tak:

for(i=0; i<=tab.length; i++)

ale pomyslalem ze tablica musi byc wyswietlana od konca. Jak bylo tak jak napisalem u gory byl ten sam problem

0

Programowanie przez permutacje jest złe! Zacznij myśleć!

0

while(liczba>=0)

nigdy nie wyjdzie z petli, az w koncu przejdzie zakres 50 i wywali ArrayIndexOutOfBoundsException

0

Zmieniłem na coś takiego:

import java.util.Scanner;


public class Poli 
{
	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);
		
		System.out.println("Podaj liczbe do zamiany: ");
		int liczba = in.nextInt();
		
		int[] tab = new int[50];
		int i=0,reszta;
		
		try{
		do
		{
			reszta = liczba%2;
			tab[i] = reszta;
			liczba = (liczba-reszta)/2;
			i++;
		}while(liczba>0);
		 int rozmiar = i-1;
		 
		System.out.print("Liczbe " + liczba + " w postaci binarnej przedstawimy jako: ");
		for(i=rozmiar; i>=0; i--)
		{
			System.out.print(tab[i]);
		}
		
		}catch(ArrayIndexOutOfBoundsException e){System.out.println("\nZakres z poza tablicy!");}

		in.close();
	}
}

I teraz wyswietla wszystko poprawnie, pytanie dlaczego nie może być while(liczba>=0) tylko while(liczba>0)? Do tej pory pisalem w C i Pascalu i tam robilem tymi sposobami i działało. Macie jakies sugestie do poprawy? bo zapewne tak;)

0

Jakim cudem działało?

Wykonujesz algorytm aż do czasu gdy masz co dzielić

0

Ahh czyli.. jesli liczba w ktoryms momencie bedzie równa 0, to wtedy reszta z dzielenia 0/2 to 0 i tak w kółko bez końca, faktycznie teraz zrozumiałem ;)

I jeszcze jedno małe pytanie, jest jakas metoda ktora zamieni nam dec>bin lub bin>dec itd. ? Przykladowo do sortowania stworzono "sort" klasy Arrays. jest tu cos podobnego?

1

bin -> dec:
Integer.parseInt("101", 2);

dec-> bin:
Integer.toBinaryString(5)

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