Char Array Werte in short variablen speichern

Status
Nicht offen für weitere Antworten.

straight7

Mitglied
Hallo, ich arbeite mich gerade in Java ein und hab n Beispielprogramm als Übung genommen.
Das Programm soll eine Binärzahl in eine Dezimalzahl umwandeln und ausgeben.

Ich lese die Binährzahl über die Tastatur ein und speicher diese als String, danach packe ich die einzelnen Chars des Strings in ein Char Array. Jetzt möchte ich die Char Werte einzeln auslesen und berechnen, das ergebniss soll in einer short Variablen gespeichert werden.

Mein problem ist das Auslesen und berechnen, ich weiß nicht genau wie ich das am besten anpacke, im mom versuche ich erst die einzelnen werte auszulesen, als short zu speichern und dann mit short variablen die berechnung zu machen.

Hier der Codeauschnitt (Werte sind im Char Array - 16stellig nur 1 und 0 ist schon überprüft)

Code:
/*
	Variablen deklarieren
	*/
	String s = ""; 
	short ergebnis;
	int temp, potenz = 1;

...snip...

for (int i = 15; i >= 0;i--) 			// Rückwärts den String durchlaufen und einzelne Werte berechnen
				{                                         
					temp = wert[i];		// Wert aus Array an der Stelle i auslesen
					//ergebnis = (potenz * temp);
					//ergebnis = (potenz * ergebnis);
					//potenz = (potenz * potenz);		// Potenz für die nächste runde erhöhen
					System.out.println(+i+" index");
					System.out.print(wert[i]+" Soll Wert"); 
					System.out.println();
					System.out.println(+temp+" Ist Wert");
					//System.out.println(+potenz);
					System.out.println();
}

Hier nochmal das komplette code

Code:
import java.io.*;

public class bin2dez {  // Klasse, die das Hauptprogramm umschliesst 

	public static void main(String args[]) throws IOException { // Hauptprogramm 

		BufferedReader in = new BufferedReader(new  InputStreamReader(System.in));
  
	/*
	Variablen deklarieren
	*/
	String s = ""; 
	short ergebnis;
	int temp, potenz = 1;
	
     
	do
	{
    
		do 
		{ 

			System.out.println("Bitte geben sie den 16stelligen Binärcode ein: ");    
			s = in.readLine(); // Werte von der Tastatur in den String einlesen
	 		
			if( s.matches( "[01]*" ) )  // Überprüfen ob der String der Menge [0,1] angehört
			{
				System.out.println( " " );
				System.out.println( "Der String ist gueltig." );

				char[] wert = s.toCharArray();  		// String umwandeln in ein char-Array
        
				System.out.println(new String(wert));
	
				for (int i = 15; i >= 0;i--) 			// Rückwärts den String durchlaufen und einzelne Werte berechnen
				{                                         
					temp = wert[i];		// Wert aus Array an der Stelle i auslesen
					//ergebnis = (potenz * temp);
					//ergebnis = (potenz * ergebnis);
					//potenz = (potenz * potenz);		// Potenz für die nächste runde erhöhen
					System.out.println(+i+" index");
					System.out.print(wert[i]+" Soll Wert"); 
					System.out.println();
					System.out.println(+temp+" Ist Wert");
					//System.out.println(+potenz);
					System.out.println();
				}
				
				System.out.println( "Ende"); 
			}
			
			else  //Eingegebener String ist falsch, Fehler bestimmen & ausgabe
			{
	 			    
				if (s.length() != 16)
				{
					System.out.println();
					System.out.println( "Der String muss genau 16 Zeichen enthalten!" );
					System.out.println( "Der eingelesene String enhielt: "+s.length()+" Zeichen" );
					System.out.println();
				}
	     
				else
				{
					System.out.println();
					System.out.println( "Der String muss aus der Zahlenmenge 0,1 bestehen! "  );
					System.out.println( "Der eingegebene String enthält ungültige Zeichen: "+ s );
					System.out.println();
				}  
		
			}
   
		} while (s.length() != 16);
  
	} while (! s.matches( "[01]*" ));
   
     
 }
}

Ich arbeite mit JEdit unter Mac Tiger (10.4.11)
javac 1.5.0_16
java version "1.5.0_16"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b06-275)
Java HotSpot(TM) Client VM (build 1.5.0_16-132, mixed mode, sharing)

Über eine hilfreiche Antwort würde ich mich sehr freuen =)
 

mad-boy

Mitglied
Hey,

ich würde das ganze mit dem Char-Array sein lassen. String bietet entweder eine sehr nützliche Funktion charAt(int position); mit der du den Wert an der jeweiligen Stelle als char zurück bekommst oder aber du nutzt Short.parseShort(String string); dann benötigst du die Methode substring() von String.

Meine Idee dazu sähe so aus:
Code:
String bin = "100101111";
        int ergebnis = 0;
        
        for(int i = 0; i < bin.length(); i++)
        {
            ergebnis += Math.pow(2, i) * Short.parseShort(bin.substring(bin.length()-i-1,bin.length()-i));
        }
        
        System.out.println("Binärzahl:\t" + bin);
        System.out.println("Dezimalzahl:\t" + ergebnis);

Dabei durchlaufe ich den String von hinten nach vorne und multipliziere jeweils die 1 oder 0 mit der Wertigkeit der Stelle (2^i). Ist es eine 1, wird die Wertigkeit also addiert, bei 0 passiert nichts.

Mit substring bekommst du den String an der stelle start (inklusive) und stop (exklusive), daher muss der Ende des Substrings jeweils eins größer sein als der Anfangsstring.

Liebe Grüße,
Michael
 

Ariol

Top Contributor
Wenns ganz einfach sein soll:

Code:
		String binary = "100101111";
		int decimal = Integer.parseInt(binary, 2);
		System.out.println(decimal);
 

straight7

Mitglied
Vorab schonmal danke für deine schnelle ausführliche Antwort.

Ich muss das mit Short.parseShort(String string) machen wie du vorgeschlagen hast. Da die Bedingungen an das programm so aussehen (is ne übung zum arbeiten mit verschiedenen datentypen):
- In String einlesen
- String in ein Char Array ablegen
- Ergebnis der Berechnung in Short speichern
- Keine math Bibliotheken verwenden

Mir ist nur nicht ganz klar ob ich die char Werte nochmal als String zwischenspeichern muss damit pasrseShort damit arbeiten kann.

hab in der Zwischezeit folgendes probiert, aber ich bekomme für eine 1 immer den wert 48 und für eine 0 den wert 49 zurückgeliefert. Wobei die variable ergebnis vomtyp short ist und das array vom typ char.

Code:
ergebnis = (short) wert[i]


EDIT: Ich werd das jetzt mit Short.parseShort(String string) versuchen =)
Auch danke an Ariol, aber muss das wie oben steht selbst coden, damit ich das verstehe - du hast gepostet als ich gerade die antwort geschrieben habe.
 

straight7

Mitglied
Soooooo nach langen probieren hab ich es endlich geschnallt.
Mein Problem war, das die Werte die ich aus dem Char Array ausgelesen habe utf8 entsprachen. Ich habe einfach 48 abgezogen und kann weiterrechnen, geht zwar bestimmt schöner & kürzer, aber ich habe gelernt warum =)
Und ich weiß jetzt auch warum seine short variable verlangt wurde....wenn man eine hohe binärzahl einliest z.B. "1111111111111111" wird die größe der variable short überschritten und wir landen im negativen Bereich.
Ich habe die Berechnung jetzt mit Integern gemacht.

hier meine Lösung:
Code:
for (int i = 15; i >= 0;i--) 			// Rückwärts den String durchlaufen und einzelne Werte berechnen
		{                    
			temp = (int) (wert[i] - 48);  // Wert aus dem Array an der Stelle i auslesen und wegen utf8 48 abziehen
			ergebnis += temp * potenz;		// Dezimalzahl berechnen
			
			System.out.println();
			System.out.println("Index "+i+" Soll Wert "+wert[i]+" Ist Wert "+ergebnis+" Potenz: "+potenz);
			
			potenz = potenz * 2;				// Potenz für die nächste runde erhöhen

		}

Mir sind auch noch diverse kleine fehler in dem Programm aufgefallen die ich jetzt ausgebessert habe =)
Danke Mad-boy & Ariol für die schnellen antworten. Ich geh jetzt erstmal pennen ;-)

Hier nochmal die überarbeitete version Komplett

Code:
import java.io.*;

public class bin2dez {  					// Klasse, die das Hauptprogramm umschliesst 

	public static void main(String args[]) throws IOException { // Hauptprogramm 

		BufferedReader in = new BufferedReader(new  InputStreamReader(System.in));
  
	/*
	Variablen deklarieren
	*/
	String s = ""; 
	int ergebnis = 0, temp, potenz = 1;
	     
	do
	{
    
		do 
		{ 
			System.out.println();
			System.out.println("Bitte geben sie den 16stelligen Binärcode ein: ");    
			s = in.readLine(); 				// Werte von der Tastatur in den String einlesen
			
			if (s.length() != 16) 			// Fehlerausgabe falls der String nicht genau 16 Zeichen hat
				{
					System.out.println();
					System.out.println( "Der String muss genau 16 Zeichen enthalten!" );
					System.out.println( "Der eingelesene String enhielt: "+s.length()+" Zeichen" );		
				}
	     
			else 									// Fehlerausgabe wenn der String nicht der Menge {0,1} entsprichht
				{
					System.out.println();
					System.out.println( "Der String muss aus der Zahlenmenge {0,1} bestehen! "  );
					System.out.println( "Der eingegebene String enthält ungültige Zeichen: "+ s );
				}  
			
		} while (s.length() != 16);
   
	} while (! s.matches( "[01]*" ));
   
	
	char wert[] = s.toCharArray();  		// String umwandeln in ein neu erzeugtes char-Array
        
	System.out.println();
	System.out.println( "Der eingegebene Binaercode "+new String(wert)+" ist gueltig!" );
	
	
	for (int i = 15; i >= 0;i--) 			// Rückwärts den String durchlaufen und einzelne Werte berechnen
		{                    
			temp = (int) (wert[i] - 48);  // Wert aus dem Array an der Stelle i auslesen und wegen utf8 48 abziehen
			ergebnis += temp * potenz;		// Dezimalzahl berechnen
			
			System.out.println();
			System.out.println("Index "+i+" Soll Wert "+wert[i]+" Ist Wert "+ergebnis+" Potenz: "+potenz);
			
			potenz = potenz * 2;				// Potenz für die nächste runde erhöhen

		}
				
	System.out.println( "Ende"); 
     
 }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
D 2D Char Array into String Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
A Löschen von Leerzeichen in einem char array ohne methoden Java Basics - Anfänger-Themen 6
R String in char-Array übertragen Java Basics - Anfänger-Themen 5
Z Char Array an zufälligen stellen mit einem "x" füllen. Java Basics - Anfänger-Themen 4
A char array wird überschrieben Java Basics - Anfänger-Themen 6
E 2D Array - char durch die Matrix "wandern" lassen Java Basics - Anfänger-Themen 7
I Methoden char Array Aufgabe (bitte hierbei um Hilfe) Java Basics - Anfänger-Themen 3
I wieder mit einer Umwandelung habe ich Problem (diesmal von char Array zu char) Java Basics - Anfänger-Themen 1
I char Array to String Java Basics - Anfänger-Themen 3
C (char) Array einlesen Java Basics - Anfänger-Themen 8
H char-Array Java Basics - Anfänger-Themen 22
C Methoden String in char Array Java Basics - Anfänger-Themen 3
E Wie wird in Java ein Char-Array terminiert ? Java Basics - Anfänger-Themen 15
W Char Array bearbeiten Java Basics - Anfänger-Themen 6
A Char-Array erstellen Java Basics - Anfänger-Themen 35
Z char Array unbekanntes Zeichen selbstständig anlegen Java Basics - Anfänger-Themen 6
M Bestimmen, wie oft ein Char in einem Array vorkommt Java Basics - Anfänger-Themen 2
C char array-positionstausch Java Basics - Anfänger-Themen 6
R Anzahl von Zeichen in einem Char Array Java Basics - Anfänger-Themen 4
L zweidimensionales char array reihenfolge ändern ? Java Basics - Anfänger-Themen 2
D Best Practice String aufbau - Char Array oder Anhängen Java Basics - Anfänger-Themen 11
S For Schleife Char Array Java Basics - Anfänger-Themen 1
W char-Array auf bestimmte Zeichen prüfen Java Basics - Anfänger-Themen 10
B char Array mit ints Java Basics - Anfänger-Themen 7
J Char-Array - NullPointerException Java Basics - Anfänger-Themen 3
J char-Array rückwärts ausgeben und in neues Char-Array speichern Java Basics - Anfänger-Themen 3
S Array - index von Benutzer eingegebenen char ausgeben Java Basics - Anfänger-Themen 3
M char Array füllen Java Basics - Anfänger-Themen 2
H ArrayList mit char- Array befüllen Java Basics - Anfänger-Themen 12
P Datentypen String auf JTextField wird zu Char-Array und anschließend zu int Java Basics - Anfänger-Themen 12
D Char Array ab bestimmter Stelle in neuem Speichern Java Basics - Anfänger-Themen 13
D Eine Stelle eines Char- Arrays nach dem vorkommen in einem ganzem anderem Array überprüfen Java Basics - Anfänger-Themen 20
C Leerzeichen im char Array setzen Java Basics - Anfänger-Themen 33
J Alle Vorkommen eines chars in einem Array durch einen anderen char ersetzen Java Basics - Anfänger-Themen 10
N Methode die String in char-Array wandelt!! Java Basics - Anfänger-Themen 11
D Erste Schritte String Array in char Array umwandeln? Java Basics - Anfänger-Themen 1
E Char-Array zu String Java Basics - Anfänger-Themen 2
M Datentypen Char Array in String Array gibt Probleme Java Basics - Anfänger-Themen 10
M Char-Array Problem Java Basics - Anfänger-Themen 6
F Char Array splitten Java Basics - Anfänger-Themen 5
S Mehrdimensionales Char-Array initialisieren Java Basics - Anfänger-Themen 17
S char Array in Character KlassenArray? Java Basics - Anfänger-Themen 24
Semox Datentypen Einlesen von char in Array schlägt unerwartet fehl Java Basics - Anfänger-Themen 4
H Datentypen char array in int umwandeln Java Basics - Anfänger-Themen 9
B Unterschied zwischen String & char Array? Java Basics - Anfänger-Themen 5
B Datentypen Char Array in einen String verwandeln? Java Basics - Anfänger-Themen 2
J char array eintraege geben Java Basics - Anfänger-Themen 2
T Char Array in fremder Klasse Java Basics - Anfänger-Themen 20
P Array index per char suche auslesen Java Basics - Anfänger-Themen 3
M 2D char Array anzeigen Java Basics - Anfänger-Themen 4
G Zeichenkette in char-Array konvertieren Java Basics - Anfänger-Themen 13
M wie auf ein feld mit leerzeichen in einem char array prüfen? Java Basics - Anfänger-Themen 4
J String in char Array Java Basics - Anfänger-Themen 2
J Verständnisfrage zu Char-Array Java Basics - Anfänger-Themen 5
N String/char-array aus datei auslesen Java Basics - Anfänger-Themen 2
M char Array in int Array Java Basics - Anfänger-Themen 3
J Array - Vertauschen Problem mit char/int Java Basics - Anfänger-Themen 6
Jen Array einlesen, Int und Char Java Basics - Anfänger-Themen 57
J Char-Array mit variabler Länge zurückliefern. Java Basics - Anfänger-Themen 11
B Deklaration eines char-array Java Basics - Anfänger-Themen 2
F abc char array Java Basics - Anfänger-Themen 3
J char[] reverse Array Java Basics - Anfänger-Themen 9
G Zufällige Buchstaben in char-Array Java Basics - Anfänger-Themen 9
0 Häufigstes Zeichen in einem Char-Array ermitteln? Java Basics - Anfänger-Themen 6
M Char Array mit Sonderzeichen in String umwandeln Java Basics - Anfänger-Themen 21
T String als Array und Umwandlung in Char Java Basics - Anfänger-Themen 7
J StringBuffer-Objekt soll auf Char-Array zugreifen. Java Basics - Anfänger-Themen 4
F char to byte array Java Basics - Anfänger-Themen 8
G Char oder Byte Array mit unbekannter länge erstellen? Java Basics - Anfänger-Themen 1
S Testen ob ein Char Array noch nicht belegt ist! Java Basics - Anfänger-Themen 3
G Char Array konvertieren Java Basics - Anfänger-Themen 7
megachucky probleme mit einem char-array. Java Basics - Anfänger-Themen 6
H char Array in String Java Basics - Anfänger-Themen 7
E Ziffer in char-Array Java Basics - Anfänger-Themen 2
S String in char-Array einfügen Java Basics - Anfänger-Themen 8
G Array und Char Java Basics - Anfänger-Themen 3
Tommilee Char ausgeben Java Basics - Anfänger-Themen 5
M error: '.class' expected switch(char) Java Basics - Anfänger-Themen 32
JordenJost char variable funktioniert irgendwie nicht a+b ergibt nicht à Java Basics - Anfänger-Themen 4
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
P9cman Char Index rekursiv finden Java Basics - Anfänger-Themen 4
Fats Waller Compiler-Fehler Kann ich einen String und die Summe zweier Char Werte mittels der println Anweisung ausgeben Java Basics - Anfänger-Themen 4
C String/Char-API Java Basics - Anfänger-Themen 13
U Char zu einem String machen Java Basics - Anfänger-Themen 1
O Ich ahbe einen char und diesen soll ich bei .matches prüfen, also ob der char in meiner Zeichenkette vorhanden ist, wie mache ich das? Java Basics - Anfänger-Themen 9
W char über die Konsole? Java Basics - Anfänger-Themen 7
C char c Java Basics - Anfänger-Themen 13
D String und char in String speichern Java Basics - Anfänger-Themen 5
S zweidimensionale char arrays Java Basics - Anfänger-Themen 14
P Methoden Namen trennen mit .substring(), char.At(), .lenght() Java Basics - Anfänger-Themen 8
A Datentyp char Java Basics - Anfänger-Themen 27
A Char und modulo Java Basics - Anfänger-Themen 8
F Switch case wird als char nicht erkannt.... Java Basics - Anfänger-Themen 6
D Datentypen Char deklaration Java Basics - Anfänger-Themen 4
J Java char.at() Probelm Java Basics - Anfänger-Themen 12
S char auf buchstabe/zeichen prüfen Java Basics - Anfänger-Themen 1
M Die länge von char Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben