Zamiana bin na dec

azalut
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1129
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?

Kopiuj
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!

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

, pytanie czemu?

Żartujesz sobie? :|

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

Przeczytaj to sobie wyraźnie na głos.

azalut
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1129
0

Generalnie na poczatku ta linia wygladala tak:

Kopiuj
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

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

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

SW
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 426
0

while(liczba>=0)

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

azalut
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1129
0

Zmieniłem na coś takiego:

Kopiuj
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;)

SW
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 426
0

Jakim cudem działało?

Wykonujesz algorytm aż do czasu gdy masz co dzielić

azalut
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1129
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?

SW
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 426
1

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

dec-> bin:
Integer.toBinaryString(5)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.