Archief - [JAVA] Converteren decimaal naar binair

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

El Di@bLo

Legacy Member
Yo,

Ik ben een klein programma'tje aant maken om conversies te doen tussen verschillende talstelsels, maar ik zit met een probleemp bij Decimaal naar Binair. Dit is men code:

Code:
public String convertDeToBi(String getal)
	{
		String opl = "";
		StringBuffer buffer = new StringBuffer();
		buffer.ensureCapacity(20);
		int num = Integer.parseInt(getal);
		while(num != 0)
		{
			
		    int rest;
		    rest = num % 2;
		    buffer.append(rest);
		    
		    num = num/2;
		}
		buffer.reverse();
		opl = buffer.toString();
		return opl; 
	}

Maar wanneer ik een testje uitvoer krijg ik deze foutmelding:

Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.String
at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:3992)
at java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2708)
at java.util.Formatter$FormatSpecifier.print(Formatter.java:2660)
at java.util.Formatter.format(Formatter.java:2432)
at java.io.PrintStream.format(PrintStream.java:920)
at java.io.PrintStream.printf(PrintStream.java:821)
at domein.Test.main(Test.java:14)

Iemand een idee hoe dit komt?

Rayne Varga

Legacy Member
Bij mij werkt het hoor, getest met java 6 en de volgende code uitgevoerd:
System.out.println(convertDeToBi("8"));

Ik vind het wel vreemd dat je een String gebruikt als parameter om die binnen de functie om te zetten naar een int, waarom geef je niet rechtstreeks een int door?

El Di@bLo

Legacy Member
Rayne Varga zei:
Bij mij werkt het hoor, getest met java 6 en de volgende code uitgevoerd:
System.out.println(convertDeToBi("8"));

Ik vind het wel vreemd dat je een String gebruikt als parameter om die binnen de functie om te zetten naar een int, waarom geef je niet rechtstreeks een int door?
Omdat ge bij hexadecimaal niet met een integer kunt werken, heb ik ze maar allemaal strings als parameter gegeven.

En de methode werkte inderdaad. Domme fout in men test.
Nu alleen nog Decimaal -> Hexa en Decimaal -> Octaal

Jack

Legacy Member
bestaan her hier niet gewoon API's voor in Java zelf? Integer naar Hex kan je bijv direct door Integer.toHexString(); en voor Binair Integer.toBinaryString() , het zou me verbazen moest er voor andere ook geen conversiemethodes bestaan. Als je JDK gebruikt kan je zelfs de source code van al die classes zoals Integer inkijken.

El Di@bLo

Legacy Member
Jack zei:
bestaan her hier niet gewoon API's voor in Java zelf? Integer naar Hex kan je bijv direct door Integer.toHexString(); en voor Binair Integer.toBinaryString() , het zou me verbazen moest er voor andere ook geen conversiemethodes bestaan. Als je JDK gebruikt kan je zelfs de source code van al die classes zoals Integer inkijken.
Ja inderdaad, van int naar andere talstelsel gaat inderdaad via Integer methodes, en van andere talstelsels naar gewone integers gaat via
Code:
int i = Integer.valueOf(String hexgetal, 16)
Maar ik deed het vooral ook om men basiskennis van computer architectuur wat aangenamer te leren, dus de manier van oplossen in zelf in java om te zetten. Het handige is dat ik zo gemakkelijk kan testen of alles correct werkt, zonder ze handmatig te moeten uitrekenen.

Morgen ga ik aan een binaire rekenmachine beginnen.

forloRn_

Legacy Member
El Di@bLo zei:
Omdat ge bij hexadecimaal niet met een integer kunt werken, heb ik ze maar allemaal strings als parameter gegeven.

Waarom niet? Voor hexadecimale literals zet je gewoon "0x" of "0X". 24 en 0x18 zijn allebei dezelfde int, ze zien er gewoon anders uit. Als je de gebruiker zelf de getallen laat invullen, gebruik je gewoon Integer.parseInt(s, 16).

El Di@bLo

Legacy Member
forloRn_ zei:
Waarom niet? Voor hexadecimale literals zet je gewoon "0x" of "0X". 24 en 0x18 zijn allebei dezelfde int, ze zien er gewoon anders uit. Als je de gebruiker zelf de getallen laat invullen, gebruik je gewoon Integer.parseInt(s, 16).
Ah dat wist ik niet
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan