Werte in array speichern und als String ausgeben??

k-one

Mitglied
Hey leutz

ich muss Dezimalzahl in Binär als String umwandeln und ausgeben....hab den code fast fertig geschrieben aber irgendwie komm ich mit der ausgabe nicht weiter, denn es wird mir kein Binär-wert angezeigt sondern ganz was anderes....??

der binär wert wird falsch rum gezeigt...das is mir schon klar ;)

[JAVA=42]
public class vigenerechiffre {

static String intZuBinaerString(int zahl){

int bwerte=0;
int ergebnis=0;
int zwischenergebnis[]=new int[10];

if(zahl>0){
ergebnis = zahl/2;
bwerte=zahl%2;
zwischenergebnis[bwerte]=bwerte;
while(ergebnis>0){
bwerte =ergebnis%2;
ergebnis/=2;
zwischenergebnis[bwerte]=bwerte;

}
return String.valueOf(zwischenergebnis);

}else
return String.valueOf(0);
}

public static void main(String[] args) {

System.out.println(intZuBinaerString(10));

}

}
[/code]

Ausgabe:

[I@10b62c9

danke für eure hilfe.....
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Anstelle das in ein Array abzulegen würde ich einen StringBuilder benutzen und einfach append() aufrufen. Dann könntest du auch evtl. mit reverse().toString() den String richtig herum zurückgeben :D
(btw: es gibt auch Integer.toBinaryString(), aber vemrutlich dürft ihr das nicht benutzen und es ist eine Übungsaufgabe oder? :D)

(p.s.:was sollen eig. die drei Zeilen vor der while-Schleife? ergebnis=zahl zu Beginn dürfte reichen(oder eben direkt zahl benutzen))
 
Zuletzt bearbeitet:

XHelp

Top Contributor
Also array kannst du nicht so ausgeben. Du musst dann die Werte durchgehen.
Aber was hälst du von:
Java:
static  String intZuBinaerString(int zahl){
  return Long.toString(zahl, 2);
}
 

k-one

Mitglied
hehe das mit Integer.toBinaryString() is mir klar und wie du schon sagst entspricht es nicht meine übung....dsa mit append() bzw Strinbuilder, kenn ich noch nicht und muss mich erstmal einlesen....
 

k-one

Mitglied
@XHelp das klappt super! und der binär wert wird sogar richtig rum angezeigt? wieso eigentlich? Long.toString() wandelt doch einfach in String um....?

Danke für die super schnelle hilfe
 

XHelp

Top Contributor
Integer.toBinaryString() dürft ihr nicht benutzen, aber Long.toString schon? :D
Naja, die 2 bedeutet, dass er Binärsystem als Basis verwenden soll. Und ja, der Wert ist richtig angezeigt... warum sollte er das nicht sein?
 

k-one

Mitglied
Teilaufgabe a).......


Implementieren Sie eine Methode
String intZuBinaerString(int zahl),
welche die Inputvariable zahl in das Binearsystem umrechnet und die Binärdarstellung
als Zeichenkette (String) zurückgibt. Sollte zahl kleiner als 0 sein,
soll die Zeichenkette 0 zurückgegeben werden.

Hinweis:
Die Klasse String stellt eine Methode charAt zur Verfügung um auf
einzelne Zeichen einer Zeichenkette zugreifen zu können. Die zurückgegebenen Zeichen
sind entsprechend dem ASCII-Standard kodiert, d.h. bspw. ist der Buchstabe
'A' durch die Zahl 65 und die Zi er '0' durch die Zahl 48 repräsentiert. Nutzen
Sie dies, um einzelne Zeichen von zahl in die entsprechenden Dezimalwerte umzurechnen.
 

XHelp

Top Contributor
Also es steht nix davon da, dass du die nicht benutzen darfst ;)
Aber der Hinweis mit charAt ist mir ein Rätsel.... wozu? oO
 

k-one

Mitglied
hinweis is vielleicht für die andere teilaufgabe......
Ich meine das was ihr geschrieben habt würde ich gerne benutzen aber ich glaub nicht das erlaubt.
Ich müsste nur wissen wie ich die bwerte irgendwo abspeichern kann, umdrehen und als Stringausgeben kann......??
 

eRaaaa

Top Contributor
Naja, ich sagte ja bereits dass sich da der StringBuilder anbieten würde, wüsste auch nicht wieso der verboten sein sollte.
Ansonsten kannst du auch bei deiner Array-Variante bleiben(10 ist aber etwas klein *g* und erfordert evtl. mehr Umbaumaßnahmen :D)
Dein Code ist ja schon gar nicht so schlecht....
 

XHelp

Top Contributor
Moment...
[JAVA=54]
while(ergebnis>0){
bwerte =ergebnis%2;
ergebnis/=2;
zwischenergebnis[bwerte]=bwerte;
}
[/code]
Code:
bwerte
wird durch modulo rechnung entweder 0 oder 1 und mit
Code:
zwischenergebnis[bwerte]=bwerte
überschreibst du immer entweder 0. oder 1. Element.

Könnte an der Uhrzeit liegen, aber meiner Meinung nach funktioniert das ganze nicht.
 

eRaaaa

Top Contributor
Hat ja auch niemand behauptet dass der funktioniert :)
In der SB-Lösung wäre der Index ja aber auch nicht notwendig...
Bei der Array-Lösung würde ich evtl. eh ein char-Array vorziehen welches von hinten nach vorne gefüllt wird. Dann new String(array,offset,länge) und gut ists...
Aber denke die SB Lösung wäre um einiges leichter und sind ~ 10 Zeilen
 

k-one

Mitglied
So hab es mit SB gemacht und es funktioniert!! wenns euch interresiert poste ich mal den code
Vielen dank für den denkanstoß!

[JAVA=42]
public class vigenerechiffre {

static String intZuBinaerString(int zahl){
String s;
int bwerte=0;
int ergebnis=0;
StringBuilder b = new StringBuilder();
if(zahl>0){
ergebnis = zahl;
while(ergebnis>0){

bwerte =ergebnis%2;
ergebnis/=2;
b.append(bwerte);
}
return s = b.reverse().toString();

}else
return String.valueOf(0);
}
public static void main(String[] args) {

System.out.println(intZuBinaerString(15));
System.out.println(intZuBinaerString(10));
System.out.println(intZuBinaerString(11));
System.out.println(intZuBinaerString(3000));
}

}

[/code]

[JAVA=42]
Ausgabe:

1111
1010
1011
101110111000

[/code]
 

XHelp

Top Contributor
Du könntest auch:
Java:
if(zahl<=0){
  return "0";
}
int ergebnis = zahl;
while...
machen, dann hast du es nicht so verschachtelt. Das sind aber eher Schönheitssache.
 

Neue Themen


Oben