# Upper Case Übung



## febru (20. Okt 2009)

hallo,

ich muss diese übung morgen im unterricht vorstellen. da ich ein blutiger anfänger in java bin, weiss ich nicht genau wie ich das anstellen soll. ich habe zwar eine lösung, aber so richtig erklären kann ich dies nicht..

Exercise 4.1:

To "capitalize" a string means to change the first letter of each word in the string to upper case (if it is not already upper case). For example, a capitalized version of "Now is the time to act!" is "Now Is The Time To Act!". Write a subroutine named printCapitalized that will print a capitalized version of a string to standard output. The string to be printed should be a parameter to the subroutine. Test your subroutine with a main() routine that gets a line of input from the user and applies the subroutine to it.

Note that a letter is the first letter of a word if it is not immediately preceded in the string by another letter. Recall that there is a standard boolean-valued function Character.isLetter(char) that can be used to test whether its parameter is a letter. There is another standard char-valued function, Character.toUpperCase(char), that returns a capitalized version of the single character passed to it as a parameter. That is, if the parameter is a letter, it returns the upper-case version. If the parameter is not a letter, it just returns a copy of the parameter.


----------



## ARadauer (20. Okt 2009)

Hast du eine konkrete Frage oder willst du eine Lösung?


----------



## Kaffeebohn (20. Okt 2009)

Wenn du eine Lösung hast, diese aber nicht erklären kannst, wieso postest du die nicht einfach mal? Dann sieht der geneigte Beobachter, ob du dich mit dem Thema befasst hast oder eher doch nicht, siehe http://www.java-forum.org/java-basics-anfaenger-themen/15634-ersten-posten-bitte-lesen.html.


----------



## febru (20. Okt 2009)

ja die lösung habe ich, ist im übungsbuch drin.

ich kapiere diese zeile nicht:
 prevCh = '.';  // Prime the loop with any non-letter character.
      for ( i = 0;  i < str.length();  i++ ) {
         ch = str.charAt(i);
         if ( Character.isLetter(ch)  &&  ! Character.isLetter(prevCh) )

was bedeutet i=0; i< str.length(); i++ ?

Lösung:
public class CapitalizeOneString {

   public static void main(String[] args) {
      String line;  // Line of text entered by user.
      TextIO.putln("Enter a line of text.");
      line = TextIO.getln();
      TextIO.putln();
      TextIO.putln("Capitalized version:");
      printCapitalized( line );
   }

   /**
    *  Print a copy of a string to standard output, with the first letterr
    *  of each word in the string changed to upper case.
    *  @param str the string that is to be output in capitalized form
    */
   static void printCapitalized( String str ) {
      char ch;       // One of the characters in str.
      char prevCh;   // The character that comes before ch in the string.
      int i;         // A position in str, from 0 to str.length()-1.
      prevCh = '.';  // Prime the loop with any non-letter character.
      for ( i = 0;  i < str.length();  i++ ) {
         ch = str.charAt(i);
         if ( Character.isLetter(ch)  &&  ! Character.isLetter(prevCh) )
            System.out.print( Character.toUpperCase(ch) );
         else
            System.out.print( ch );
         prevCh = ch;  // prevCh for next iteration is ch.
      }
      System.out.println();
   }

} // end CapitalizeOneString


----------



## Landei (20. Okt 2009)

febru hat gesagt.:


> ich kapiere diese zeile nicht:
> prevCh = '.';  // Prime the loop with any non-letter character.
> for ( i = 0;  i < str.length();  i++ ) {
> ch = str.charAt(i);
> ...



Übersetzt: 
i=0 ---> i startet mit dem Wert 0  
i< str.length() ---> i muss kleiner als str.length() sein, sonst gehe raus aus der Schleife und mache danach weiter
i++ ---> erhöhe i bei jedem Schleifendurchlauf um eins. Man könnte genauso gut schreiben i = i + 1

Im Endeffekt wird der Schleifeninhalt also für i = 0, 1 ... (str.length() - 1) ausgeführt. In der Schleife wird dementsprechend der erste, zweite.... Buchstabe mit charAt ausgewählt.


----------



## febru (20. Okt 2009)

danke!

ich kapiere jetzt noch nicht, wo dass das programm merkt, dass ein neues wort beginnt, also wann eine lücke(space) kommt?


----------



## ARadauer (20. Okt 2009)

hier:! Character.isLetter(prevCh) 
wenn das voherige Zeichen kein Buchstabe ist... das ! bedeutet "nicht"


----------



## febru (20. Okt 2009)

ah ok..

habe mir jetzt mal diese lösung zusammen gestellt:
public class Capitalize {


       public static void main(String[] args) {
          String inputString;  // Line of text entered by user.
          TextIO.put("Enter a line of text: ");
          inputString = TextIO.getln();
          printCapitalized(inputString);
       }

       static void printCapitalized( String str ) {

          char currentCharacter;  		// A character in str.
          char previousCharacter = '.'; 	// Character that comes before currentCharacter
	  int  i;                	        // A position in str


        for ( i = 0;  i < str.length();  i++ ) {
             currentCharacter = str.charAt(i);
             if ( Character.isLetter(currentCharacter)  &&  ! Character.isLetter(previousCharacter) )
                System.out.print( Character.toUpperCase(currentCharacter) );
             else
                System.out.print( currentCharacter );
             previousCharacter = currentCharacter;
          }
       System.out.println();
       }
    }


----------



## febru (20. Okt 2009)

noch eine frage, dann hab ich glaube ich begriffen:toll:

bedeutet "previousCharacter = currentCharacter;" dass der vorherige(previous) Buchstabe jetzt der jetztige (current) Buchstabe wird? das würde ja bedeuten, dass das Programm von rechts nach links "liesst"?

ach ja, und was bedeutet bei der Definition von previousCharacter das = ´.´??

danke vielmals für eure Antworten, hat mir schon sehr geholfen.


----------



## ARadauer (20. Okt 2009)

> dass das Programm von rechts nach links "liesst"?


warum?
Versuch das ganze mal mit Papier und Bleistift nachzuvollziehen.


----------



## febru (20. Okt 2009)

bedeutet ´.´, dass nach einem punkt automatisch gross weitergeschrieben wird?


----------

