# Werte in array speichern und als String ausgeben??



## k-one (27. Aug 2010)

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.....


----------



## eRaaaa (27. Aug 2010)

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 
(btw: es gibt auch Integer.toBinaryString(), aber vemrutlich dürft ihr das nicht benutzen und es ist eine Übungsaufgabe oder? )

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


----------



## XHelp (27. Aug 2010)

Also array kannst du nicht so ausgeben. Du musst dann die Werte durchgehen.
Aber was hälst du von:

```
static  String intZuBinaerString(int zahl){
  return Long.toString(zahl, 2);
}
```


----------



## k-one (27. Aug 2010)

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 (27. Aug 2010)

@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


----------



## eRaaaa (27. Aug 2010)

Hä? Und wieso sollte das jetzt auf einmal erlaubt sein? :autsch:


----------



## XHelp (27. Aug 2010)

Integer.toBinaryString() dürft ihr nicht benutzen, aber Long.toString schon? 
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 (27. Aug 2010)

habs auch gerad gecheckt....das is natürlich nicht erlaubt!


----------



## XHelp (27. Aug 2010)

eRaaaa hat gesagt.:


> Hä? Und wieso sollte das jetzt auf einmal erlaubt sein? :autsch:


Vllt steht in der Aufgabe wörtlich:
"Benutzen Sie dafür nicht die Integer.toBinaryString()-Methode" :joke:


----------



## k-one (27. Aug 2010)

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 (27. Aug 2010)

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 (27. Aug 2010)

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 (27. Aug 2010)

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 )
Dein Code ist ja schon gar nicht so schlecht....


----------



## XHelp (27. Aug 2010)

Moment...
[JAVA=54]
while(ergebnis>0){
  bwerte =ergebnis%2;
  ergebnis/=2;
  zwischenergebnis[bwerte]=bwerte;
}   
[/code]

```
bwerte
```
 wird durch modulo rechnung entweder 0 oder 1 und mit 
	
	
	
	





```
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 (27. Aug 2010)

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


----------



## XHelp (27. Aug 2010)

eRaaaa hat gesagt.:


> Bei der Array-Lösung würde ich evtl.  eh ein char-Array vorziehen


boolean machts auch, immer hin verbrauchst du da nur halb so viel Platz 
Aber ja, SB-Lösung ist vllt besser.


----------



## k-one (27. Aug 2010)

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 (27. Aug 2010)

Du könntest auch:

```
if(zahl<=0){
  return "0";
}
int ergebnis = zahl;
while...
```
machen, dann hast du es nicht so verschachtelt. Das sind aber eher Schönheitssache.


----------

