# char Einlesen und Auswerten



## Kaa27 (8. Mai 2012)

Hallo!

Folgendes Problem habe ich mit meinem Programm.
Ich soll einen char einlesen, der, wenn es sich um eine Ziffer (0-9) handelt, mir ausgibt, dass ich eine Ziffer eingegeben habe.

Es gibt mehrere Probleme.

1: Egal was ich eingebe, die Antwort lautet "Sie haben eine Ziffer eingegeben.
2: Möchte ich z.B. einen "else {} return false;" Teil in der static boolean einbauen. Schaffe das allerdings nicht.

3: Sieht das if( ch == 0 || ch == 1 ....) gar nicht schön aus. GIbts da was eleganteres?

Hier der Code


```
import java.util.Scanner;

public class A5 {

	static boolean checkDigit(char ch) {
		if (ch == 0 || ch == 1 || ch == 2 || ch == 3 || ch == 4 || ch == 5
				|| ch == 6 || ch == 7 || ch == 8 || ch == 9) {
		}
		return true;

	}

	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);
		char ch;

		System.out.println("Eingabe einer Ziffer");
		ch = in.next().charAt(0);

		System.out.println("Hier Ihre Eingabe :" + ch);

		if (checkDigit(ch) == true) {
			System.out.println("Sie haben eine Ziffer eingegeben");
		}
		if (checkDigit(ch) == false) {
			System.out.println("Keine Ziffer");
		} else {
		}
	}

}
```

Beste Grüße


----------



## Volvagia (8. Mai 2012)

1) char 0, 1, 2, 3, 4, 5, 6, 7, 8 und 9 sind alles keine Ziffern.
2) Du gibst ja auch immer true zurück. Im Statement der if steht nichts drinnen.
3) Character.isDigit ist eine spur kürzer.
4) "else return(false)" ist unnötig. Warum wertest du in der if eine boolean aus und gibst dann eine andere zurück?
5) Du solltest die Eingabe erst validatieren, bevor du einen char davon holst.
6) "boolean == true" ist recht unschön.
7) Die ifs mit der Ausgabe ebenfalls. Eine Boolean hat nur maximal 2 Zustände.


----------



## Kaa27 (8. Mai 2012)

Uff uff uff. Eine Menge abzuarbeiten.

Also. Das 0-9 keine Ziffern sind, sondern char´s ist mir bewusst. 
Ich dachte das wenn ich sage ch == '0' (jetzt mit anführungsstrichen, was aber auch nichts bringt)
das Programm guckt ob die Eingabe genau 0 (bzw. der char genau 0) ist. Und dann soll er true zurück geben.

Zu dem Punkt das in der if {Anweisung} nichts steht, kann ich nur sagen, dass ich nicht weis was ich da rein schreiben soll. Also klar, eine anweisung, aber ich möchte ja eigentlich nur ein true/false zurück geben.

Punkt 4 ist klar.


Steh grad etwas auf den Schlauch.


----------



## AquaBall (8. Mai 2012)

Kaa27 hat gesagt.:


> Uff uff uff. Eine Menge abzuarbeiten.
> 
> Also. Das 0-9 keine Ziffern sind, sondern char´s ist mir bewusst.
> Ich dachte das wenn ich sage ch == '0' (jetzt mit anführungsstrichen, was aber auch nichts bringt)
> ...




```
ch == '0' (jetzt mit anführungsstrichen)
```
bringts eben schon, wenn das if richtig ist!



```
if (...) {
   return ...
}
```


----------



## Volvagia (8. Mai 2012)

Es funktioniert wegen Punkt 2 nicht:


```
static boolean checkDigit(char ch) {
	if (ch == 0 || ch == 1 || ch == 2 || ch == 3 || ch == 4 || ch == 5
        	|| ch == 6 || ch == 7 || ch == 8 || ch == 9) {
		//Hier steht nichts
	}
	return true; //Das wird immer zurückgegeben.
}
```

Besser wäre es so:


```
static boolean checkDigit(char ch) {
	if (ch == '0' || ch == '1' || ch == '2' || ch == '3' || ch == '4' || ch == '5'
        	|| ch == '6' || ch == '7' || ch == '8' || ch == '9') {
		return(true);
	}
	return(false);
}
```

Noch besser so:


```
static boolean checkDigit(char ch) {
	return(ch == '0' || ch == '1' || ch == '2' || ch == '3' || ch == '4' || ch == '5'
        	|| ch == '6' || ch == '7' || ch == '8' || ch == '9');
}
```

Und am Besten so: (Sofern das von der Aufgabenstellung her erlaubt ist)


```
static boolean checkDigit(char ch) {
	return(Character.isDigit(ch));
}
```

Gäbe noch die Möglichkeit zu prüfen, ob der char >= '0' und <= '9' ist, finde ich aber nicht so schön.


----------



## Kaa27 (8. Mai 2012)

Oha. Das sieht doch sehr ordentlich aus. Die letzte Version war mir quasi total unbekannt.

Merci

(btw. das war keine hausaufgabe o.ä. Reine Übung)


----------



## timbeau (9. Mai 2012)

Immer erst die API lesen. 

Und ich finde einen Bereich wie 0 - 9 einzeln aufzuzählen unglücklich.


----------



## VfL_Freak (9. Mai 2012)

Moin,



Kaa27 hat gesagt.:


> Also. Das 0-9 keine Ziffern sind, sondern char´s ist mir bewusst.


Ist vlt. ein wenig OffTopic, aber gewissermaßen sind es natürlich (auch) Zahlen ... Hexadezimal-Zahlen  
Du hättest es nämlich auch so schreiben können:

```
return( ch = 0x30 || ch = 0x31 || ch = 0x32  ... usw. );
```
Alles Frage der Werteinterpretation 

Aber das Prüfen mit den erwähnten "_*checkDigit*_" ist natürlich um Längen eleganter :toll:

Gruß
Klaus


----------



## Crian (10. Mai 2012)

VfL_Freak hat gesagt.:


> Du hättest es nämlich auch so schreiben können:
> 
> ```
> return( ch = 0x30 || ch = 0x31 || ch = 0x32  ... usw. );
> ```



Dann aber bitte mit 
	
	
	
	





```
==
```
.


----------



## VfL_Freak (10. Mai 2012)

oops - ja klar 
Da war ich wohl zu schnell


----------

