# 3 Java Methoden



## underpein (11. Jan 2011)

Hallo ...
Ich hab da ein problem mit einer Aufgabe.
Sitze schon seit einigen Tagen dran und komm einfach nicht weiter.
Da meine Versuche zu fehlerhaft sind und schwer nachzuvollziehen poste ich mal die Aufgabe.

1.)Wert des i-ten Bits
Parameter: Ein short-Parameter flags, ein byte-Parameter k
Rückgabe: Wert des k-ten Bits von flags (falls 0=<k=<15, das 0. Bit steht ganz rechts.)
                                                         -1 (falls k<0 oder k >15)
2.)Wert des nächsten Buchstabens
Parameter: Ein char-parameter buchstabe
Rückgabe: Der nächste Buchstabe im Alphabet (dabei vom Ende des Alphabets Rückkehr an den Anfang,
also B für A , C für B , .... , Z für Y und A für Z)

3.)Konkatenation
Parameter: Zwei String-Parameter s1 und s2
Rückgabe: Der String der sich ergibt wenn man s1 und s2 aneinanderhängt und ein leerzeichen dazwischensetzt.

Betten sie im Hauptprogramm die aufrufe der methoden in ein Auswahlmenu ein: der benutzer soll hier eine der drei möglichkeiten auswählen. Er soll dann werte eingeben die anschließend beim Mtheodenaufruf als aktuelle parameter benutzt werden.Solange bei 2.) ein Zeichen eingeben wird das kein Großbuchstabe ist soll die Eingabe wiederholt werden.Das Hauptprogramm soll dann die gewählte methode aufrufen und nach ihrer Rückkehr das Ergebnis auf den Bildschirm ausgeben. Innerhalb der Methoden sollen also keine Tastatureingaben oder Bilschirmausgaben erfolgen. Der vorgang soll so lange wiederholt werden bis der Benutzer eine Beendigung wünscht.


Wäre sehr dankbar wenn ich Zahlreiche Hilfen bekomme da ich im verzug bin.

Mit freundlichen Grüßen
ME


----------



## Marco13 (11. Jan 2011)

underpein hat gesagt.:


> schwer nachzuvollziehen



Hier sind ein paar clevere Leutchen unterwegs. Lass es mal auf den Versuch ankommen


----------



## underpein (11. Jan 2011)

ne die ansätze sind da schon falsch bei mir....
mir würde auch hier so ein denk anstoß sehr weiter helfen wie ichüberhaupt erstmal beginnen soll...
Ich frag mich auch wie anspruchsvoll ist die aufgabe weil ich werde aus den parameter&rückgabe nicht wirklich schlau draus...
also da fehlt vorne und hinten an wissen und übung


----------



## tagedieb (11. Jan 2011)

Deine Hausaufgaben machen wir hier eigentlich nicht, also streng mal deinen Grips an.

1. Definier die Klassenmethoden
    sicher brauchst du eine main(..)-Methode und die andern Methoden sind ja in der Aufgabe definiert




			
				underpein hat gesagt.:
			
		

> 1.)Wert des i-ten Bits
> Parameter: Ein short-Parameter flags, ein byte-Parameter k
> Rückgabe: Wert des k-ten Bits von flags (falls 0=<k=<15, das 0. Bit steht ganz rechts.)
> -1 (falls k<0 oder k >15)



Name: kannst du frei waehlen. z.B. *getBitAt*
Parameter1: *short *flag
Parameter2: *byte* k
Rueckgabe: moegliche Werte sind 0, 1 oder -1. Diese Werte lassen sich in einem *byte *oder *int *speichern

Daraus kannst du ohne Probleme die Methoden-Signatur erstellen


```
byte getBitAt(short flag, byte k) {
  // dein Code
  //   -  Wertebereich von k pruefen
  //   -  Wenn gueltiger Wert errechne das entsprechende Bit - Stichwort: Bit-shifting, Alternativ: Integer.toBinaryString(..)
  return result;
}
```
}

Bei den andern beiden Methoden kannst du genau gleich vorgehen.
Ich denke mal Methode 1 ist wohl am anspruchvollsten, die andern beiden sollten kein wirkliches Problem darstellen




> weil ich werde aus den parameter&rückgabe nicht wirklich schlau draus...



Eventuell nochmal das ensprechende Kapitel lesen und ein paar einfachere Uebungen machen..


----------



## underpein (11. Jan 2011)

ok danke erstmal für diesen schritt ich schau dann mal wie weit ich komme...
ich erwarte auch nicht dass sie irgendjemand für mich löst das ist ja nicht der sinn meiner übung ...


----------



## henpara (11. Jan 2011)

weil mir gerade langweilig ist, löse ich mal


> 3.)Konkatenation
> Parameter: Zwei String-Parameter s1 und s2
> Rückgabe: Der String der sich ergibt wenn man s1 und s2 aneinanderhängt und ein leerzeichen dazwischensetzt.



ohne Anspruch auf Richtigkeit :


```
private String Konkatenation(String s1, String s2) {
return s1 + " " + s2
}
```


----------



## Landei (11. Jan 2011)

Aufgabe 1: return (k >> flag) & 1;


----------



## Gastredner (11. Jan 2011)

Landei hat gesagt.:


> Aufgabe 1: return (k >> flag) & 1;


Ist es nicht [c](flag >> k) & 1[/c]?


----------



## underpein (11. Jan 2011)

also die 3. hab ich genauso @henpara


----------



## underpein (11. Jan 2011)

hier ist mein versuch zu 
2. 

```
public class A {

  /**
   * @param args
   */
  public static void main(String[] args) {
    
    System.out.println(naechsterBuchstabe('Z'));

  }

  public static String naechsterBuchstabe (char buchstabe)
  { 
    int wert = buchstabe;
    if (buchstabe == 'A')
      return String.valueOf('Z');
    else
    {   
      wert--;
      String vorherigerBuchstabe = String.valueOf((char)wert);
      return  vorherigerBuchstabe;
    }
    
  }
}
```


----------



## underpein (11. Jan 2011)

aber mit der 1. komm ich immernoch nicht klar


----------



## Runtime (11. Jan 2011)

Ein Name darf nicht mit einer Zahl beginnen.


----------



## underpein (11. Jan 2011)

das war eben nur umgeändert^^ ohne nachgedacht


----------



## underpein (11. Jan 2011)

so ich hab jetzt mal was versucht mit allen 3 methoden 


```
import java.io.*;

class Methoden_in_Java{

        public int getBit(short flags, byte k){
        if(k < 0 || k > 15)
        {
          return -1;
        }
        short mask = 1 << k;
        if((flags & mask) == mask)
        {
          return 1;
        }
        else
        {
          return 0;
        }
        
        public static void main(String[] args){

        System.out.println(naechsterBuchstabe('Z'));

        }

        public static String naechsterBuchstabe (char buchstabe)
        {
          int wert = buchstabe;
          if (buchstabe == 'A')
            return String.valueOf('Z');
          else
          {
            wert--;
            String vorherigerBuchstabe = String.valueOf((char)wert);
            return  vorherigerBuchstabe;
          }

        }
        
        private String Konkatenation(String s1, String s2){
        return s1 + " " + s2
        }
        
}
```


----------



## underpein (13. Jan 2011)

so dank hilfe ist das Programm fertig


```
import java.io.*;

class Auswahlmenu {
      public static int itesBit(short flags, byte k){
      if(k < 0 || k > 15) return -1;

      int erg = flags >> k;
      erg = erg & 1;
      return erg;

      }
      public static char naechsterBuchstabe(char buchstabe){
      buchstabe = (char) (buchstabe + 2);

      if(buchstabe == '[') buchstabe = 'A';
      if(buchstabe == 92) buchstabe = 'B';

      return buchstabe;

      }
      public static String Konkatenation(String s1, String s2){
      return s1 + " " + s2;

      }


  public static void main(String args[]) throws IOException{
  BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    int eingabe;
    do{
        System.out.println("nnnhauptmenü");
        System.out.println("1) wert des i-ten bits");
        System.out.println("2) bit auslesen");
        System.out.println("3) strings verketten");
        System.out.println("4) ende");
        System.out.println("bitte wählen");

        eingabe = Integer.parseInt(in.readLine());

        switch(eingabe){
              case 1:
                  System.out.println("bitte zahl eingeben");
                  short flags = Short.parseShort(in.readLine());
                  System.out.println("welches bit auslesen?");
                  byte k = Byte.parseByte(in.readLine());
                  int ergebnis = itesBit(flags, k);
                  if(ergebnis == -1)
                        System.out.println("k muss zwischen 0 und 15 liegen!");
                  else
                        System.out.println("das " + k + ". bit im bitmuster der zahl " + flags + " ist " + ergebnis);
                  break;
              case 2:
                  char ein;
                  do{
                        System.out.println("bitte grossbuchstaben eingeben");
                        ein = in.readLine().charAt(0);
                        if(ein < 'A' || ein > 'Z') System.out.println("eingabe war kein grossbuchstabe!");
                  }while(ein < 'A' || ein > 'Z');
                  int neu = naechsterBuchstabe(ein);
                  System.out.println("zwei buchstaben nach " + eingabe + " liegt ein " + neu);
                  break;
                case 3:
                  System.out.println("string1 eingeben");
                  String s1 = in.readLine();
                  System.out.println("string2 eingeben");
                  String s2 = in.readLine();
                  String Ergebnis = Konkatenation(s1, s2);
                  System.out.println("s1=\"" + s1 + "\" --- s2=\"" + s2 + "\" --- ergebnis=\"" + Ergebnis + "\"");
                  break;
              case 4:
                  break;
              default:
                  System.out.println("falsche eingabe!");
        }
    }while(eingabe != 4);
  }
}
```

Kann als erledigt markiert werden.
Danke an alle die geholfen haben


----------

