# Groß/KleinBuchstaben zählen



## desperate (21. Sep 2014)

Hallo liebe Leute,
hier meine Frage und ich hoffe ihr könnt mir helfen. Bin noch nicht lange dabei und daher wahrscheinlich auch eher simplerer natur die Frage...

Ich soll die Anzahl der Groß bzw Kleinbuchstaben, sowie aller Zeichen in einem Stringfeld w[] ermitteln. 
Kann mir da jemand erklären wie das geht... ALso wie ich alle Zeichen ermittle weiß ich schon.
Nur das mit den Groß/Kleinbuchstaben weiß ich nicht. Möchte dann bei der Ausgabe stehen haben:
Großbuchstaben: x
Kleinbuchstaben: y

Vielen Dank schonmal im vorraus.
verzweifelte Grüße


----------



## SuperJavaMan (21. Sep 2014)

Hallo 

Du musst dafür die ascii tabelle hernehmen 
Anhang anzeigen 6863


----------



## nvidia (21. Sep 2014)

SuperJavaMan hat gesagt.:


> [...]
> Du musst dafür die ascii tabelle hernehmen



Nö, muss er nicht da Java Methoden bietet um herauszufinden ob ein Zeichen ein Charakter, Zahl, groß o. kleingeschrieben ist.


----------



## SuperJavaMan (21. Sep 2014)

viele wege führen nach rom


----------



## nvidia (21. Sep 2014)

SuperJavaMan hat gesagt.:


> viele wege führen nach rom



Richtig, deshalb erwähnte ich die Alternative. Da die Verwendung der ASCII-Codes ein "kann" und kein "muss" ist. Und bleibt man bei der Wege-Metapher, falls man nicht gezwungen ist über einen Feldweg zu hoppeln, kann man auch gleich den gut ausgebauten Weg verwenden.


----------



## Sogomn (21. Sep 2014)

```
int getLowerCaseLetters(final String string) {
	char[] chars = string.toCharArray();
	int amount = 0;
	for (char c : chars) {
		if (Character.isLowerCase(c)) amount++;
	}
	return amount;
}
```

Wie das dann mit dem Zählen der Großbuchstaben geht, kannst du dir dann wohl denken.


----------



## desperate (22. Sep 2014)

Danke. Werde es heute abend mal ausprobieren und berichten ob ich es hinbekommen habe. 
Vielen dank


----------



## desperate (22. Sep 2014)

Guten Abend und danke für eure Hilfe. Es hat mir auch schon geholfen, nur bin ich leider immer noch nicht viel weiter mit meinem Programm, da ich absoluter Anfänger bin. Sorry...
Ich schilder mal kurz die Probleme: Ich habe jetzt die Methoden quasi "kopiert", um die Anzahl der Groß und Kleinbuchstaben zu zählen. 
Ich möchte aber auch noch ein Feld r der Rückgabewerte erzeugen, welches so aussehen soll:
r[0] : Anzahl der Kleinbuchstaben
r[1] : Anzahl der Großbuchstaben
Habe damit auch schon angefangen aber weiß nicht, wie ich es aufs " Papier " bringe soll, genauso wie die main Methode um alle anderen Methoden aufzurufen. Ich setz mal meinen code hier rein, da stehen als Kommtare auch noch einige Fragen. Wäre super nett, wenn ihr mir nochmal helfen könntet.


----------



## desperate (22. Sep 2014)

uh sorry habe vergessen den code in dieser Form zu posten...


```
public class Buchstaben{
	
		
		 static int getLowerCaseLetters(final String HaLLo){ // Methode Kleinbuchstaben zählen
			char[] chars = HaLLo.toCharArray(); // ist das Hallo da so richtig???
			int amount = 0;
			
			for (char c : chars){
				if (Character.isLowerCase(c)) amount++;
			}
		return amount;  
			 
		 }
		
		 static int getUpperCaseLetters(final String HaLLo){ // Methode Großbuchstaben zählen
				char[] chars = HaLLo.toCharArray();
				int amount = 0;
				
				for (char c : chars){
					if (Character.isUpperCase(c)) amount++;
				}
			return amount;  }
		 
		  int r [] = new int [2]; {		 // Feld der Rückgabewerte
          r [0]= ;                       // Was muss ich hier eintragen???
          r [1]= ;
        		  
            			
		 }
		public static void main (String[] args){    
			
			getLowerCaseLetters ();             // Hier muss ich doch die Methoden aufrufen oder?
			getUpperCaseLetters ();
			System.out.println(  );
			
		
			
		
	}
    	   
    	   
	}
```


----------



## Saheeda (22. Sep 2014)

@desperate

Bist du dir bewusst, dass 'HaLLo' lediglich der Name des String ist, der analysiert wird, aber nicht der String selbst?
Variablen werden per Konvention klein und mit CamelCases geschrieben (also z.B. countNumbers, getLowerCaseLetters, etc.)

Dein Feld finde ich persönlich etwas unglücklich gewählt. Du müsstest dir entweder merken, welcher der beiden Indizes welchen Wert beinhaltet, oder es irgendwo notieren.
Den Wert weißt du so zu: 
r[0] = amount;

EDIT: deine Array-Deklaration sollte gar nicht erreichbar sein. Nach "return" wird die Methode sofort verlassen, vollkommen egal, was drunter steht.


Dein Code sollte eigentlich nicht kompiliert werden können. In den Methoden selbst definierst du einen Parameter. In dem Fall 'final String HaLLo', beim Methodenaufruf in der Main übergibst du aber keine.

Der Aufruf sollte so aussehen:


```
public static void main (String[] args){    

	String toAnalyze = "HaLLo";
	int countLowerCases = getLowerCaseLetters(toAnalyze);             
	int countUpperCases = getUpperCaseLetters(toAnalyze);
	System.out.println("lower: " + countLowerCases  );
	System.out.println"upper: " + countUpperCases)

	System.out.println(getLowerCaseLetters(toAnalyze));
	System.out.println(getUpperCaseLetters(toAnalyze));
}
```

Deine Funktionen haben Rückgabewerte, du machst damit aber nichts, sie "laufen ins Leere". Um eine Rückgabe wirklich zu benutzen, musst du eine Variable deklarieren, die den Wert annimmt (in meinem Fall heißen die countLowerCases und countUpperCases).
Alternativ kannst du auch die Funktion direkt im System.out.println() aufrufen.


----------



## Sogomn (22. Sep 2014)

Da muss sich noch mal einer die Basics angucken


----------



## stg (22. Sep 2014)

Glashaus und so?! :reflect:


----------



## Saheeda (23. Sep 2014)

Der TE und ich hätten mehr davon, wenn ihr mich korrigieren würdet, anstatt nur zu sagen "Nö.".


----------



## desperate (23. Sep 2014)

Und da bin ich wieder. Hab es jetzt nochmal etrwas überarbeitet. Bekomme aber einen Fehler beim Rückgabewert, den ich nicht verstehe. Ist im Code markiert und ja für weitere Tipps bin ich immer offen. 

```
static int buZaehl(final String w){ 
		    int r = [2];              // Hier bekomme ich ein Fehler, irgendwas wird erwartet???
		    
		    char[] chars = w.toCharArray(); 
			int kl = 0;
			int gr = 0;
			
			for (char c : chars){
				if (Character.isLowerCase(c)) kl++;

				if (Character.isUpperCase(c)) gr++;
}           r[0] = kl;
		    r[1] = gr;
			
			return r;
	}
	  public static void main ( String[]args){
		  
		  String toAnalyze = "TestReihe";
			int countLowerCases = buZaehl(toAnalyze);             
			int countUpperCases = buZaehl(toAnalyze);
			
			System.out.println("Kleinbuchstaben: " + countLowerCases  );
			System.out.println("Großbuchstaben: " + countUpperCases);

	  }
```


----------



## Joose (23. Sep 2014)

desperate hat gesagt.:


> Und da bin ich wieder. Hab es jetzt nochmal etrwas überarbeitet. Bekomme aber einen Fehler beim Rückgabewert, den ich nicht verstehe. Ist im Code markiert und ja für weitere Tipps bin ich immer offen.



Warum schreibst du nicht den Compiler Fehler hier hin wenn du schon einen hast?
Fehlermeldungen sollten immer mitgepostet werden! Das erspart mühsames nachfragen 



desperate hat gesagt.:


> ```
> static int buZaehl(final String w){
> int r = [2];              // Hier bekomme ich ein Fehler, irgendwas wird erwartet???
> ```



Du willst der Variable "r" etwas zuweisen. Da es sich hier um eine Variable von Typ "int" handelt kannst du nur Zahlen zuweisen.
Dein "[2]" ist keine gültige Zuweisung. Eckige Klammer deuten auf einen Arrayzugriff per Index hin. Was willst du denn deiner Variable "r" zuweisen?


----------



## desperate (23. Sep 2014)

AH sorry hier ist der Fehler:

```
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	Syntax error on token "=", Expression expected after this token
```
also r [] soll mein rückgabefeld sein. cih wollte es dann so haben, dass die rückgabewert folgenden aufbau haben:
r[0] : Anzahl der Kleinbuchstaben in w []
r[1] : Anzahl der Großbuschtaben in w[]


----------



## Joose (23. Sep 2014)

Dann musst du "r" richtig deklarieren und auch entsprechend initialisieren!

int kann nur einen Wert haben. Was du brauchst ist ein int[] mit einer Länge von 2.


----------



## desperate (23. Sep 2014)

OK habe ich gemacht, nur jetzt taucht ein Fehler bei der return aktion auf

```
static int buZaehl(final String w){ 
		    int [] r = new int [2];             
		    
		    char[] chars = w.toCharArray(); 
			int kl = 0;
			int gr = 0;
			
			for (char c : chars){
				if (Character.isLowerCase(c)) kl++;

				if (Character.isUpperCase(c)) gr++;
}           r[0] = kl;
		    r[1] = gr;
			
			return r;  // Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
			           //Type mismatch: cannot convert from int[] to int
	}
	  public static void main ( String[]args){
		  
		  String toAnalyze = "TestReihe";
			int countLowerCases = buZaehl(toAnalyze);             
			int countUpperCases = buZaehl(toAnalyze);
			
			System.out.println("Kleinbuchstaben: " + countLowerCases  );
			System.out.println("Großbuchstaben: " + countUpperCases);

	  }
```


----------



## Joose (23. Sep 2014)

Super die Exception steht dabei 

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from int[] to int

Aber wo bleibt die Eigeninitiative?
Die Exception beschreibt aufs Wort genau wo das Problem liegt.

Er will wo von "int[]" auf "int" casten. Der Fehler taucht in der Zeile "return r;" auf. 
Jetzt musst du dir nur noch überlegen warum er nach "int" casten will und wie du es beheben/richten kannst.


----------



## Sogomn (23. Sep 2014)

stg hat gesagt.:


> Glashaus und so?! :reflect:


Muss man nicht verstehen...?


----------



## desperate (23. Sep 2014)

Hallo nochmal. Ich habe es endlich hinbekommen. Tut mir Leid wenn ich euch damit genervt habe und diese einfachen fragen stelle. Aber es kommen bestimmt noch mehr...
Hier der Code damit ihr mir auch glaubt.....

```
static int[] buZaehl(final String w){ 
		    int [] r = new int [3];             
		    
		    char[] chars = w.toCharArray(); 
			int kl = 0;
			int gr = 0;
			
			
			for (char c : chars){
				if (Character.isLowerCase(c)) kl++;
				if (Character.isUpperCase(c)) gr++;
            }
			int zeichen = w.length();
			r[0] = kl;
		    r[1] = gr;
			r[2] = zeichen;
			return  r;  
	}
	  public static void main ( String[]args){
		  
		    String toAnalyze = "Ich habe es geschaft!!! JUHU";
		    		
		    
		    int countLowerCases = buZaehl(toAnalyze)[0];             
			int countUpperCases = buZaehl(toAnalyze)[1];
			int ze = buZaehl(toAnalyze)[2];
			System.out.println("Kleinbuchstaben: " + countLowerCases  );
			System.out.println("Großbuchstaben: " + countUpperCases);

			System.out.println("Zeichen: " + ze);
	  }
```
und vielen vielen Dank für die tollen Tipps. Echt super!!!


----------



## Sogomn (23. Sep 2014)

> damit ihr mir auch glaubt


----------

