Algorithmus in einer Methode ausführen

verano

Mitglied
Hallo zusammen,

ich bin neu bei java und seit c.a 1 1/2 monaten dabei.

ich habe die folgende aufgabe geschrieben:

Java:
import java.io.*;

public class Kontrollstrukturen {
  
  public static void main(String[] args) throws IOException {
    
      String s;
      char c; 
      int p;
    
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));  
      
    System.out.println("String eingeben:");     
    s = in.readLine(); 
    System.out.println("Char eingeben:");
    c = (char) in.readLine().charAt(0); 
    p=-1;
    
    for(int i= 0; i<= (s.length()-1); i++)
    
    if(s.charAt(i)==c){ 
        p = i;
        break;
    }
    
    if(p==-1){  
      System.out.println("Nicht gefunden");
    }
    else {   
      System.out.println("Position: " + p); 
      
    }
      
  }
}


das programm liest einen string ein (hallo z.b.) und möchte dann einen char wert wissen und zieht dann davon 1 ab und gibt den wert aus.

jetzt soll ich die oben genannte aufgabe umschreiben.

der eigentliche algorithmus soll in einer methode aufgeführt werden. die methode soll s und c als parameter übergeben bekommen und p als rückgabewert liefern. die ein und ausgabe (einschließlich des tests,ob der rückgabewert gleich -1 ist) sollen im hauptprogramm erfolgen; das hauptprogramm soll also die entsprechende methode aufrufen.

ich habe versucht bei java ist eine insel durchzublicken und habe mir die scripte angeguckt, nur versteh ich das thema methoden einfach nicht. methoden sind unterprogramme, die im hauptprogramm aufgerufen werden. soweit bin ich schonmal 😀
nur wie bekomm ich jetzt den algorithmus oben als methode ? deklarier ich die variablen jetzt nur in der methode oder schon vorab im hauptprogramm?

hoffe, ich habe mich verständlich ausgedrückt. ich versteh leider nur bahnhof und habe gerade ein brett vorm kopf.

viele grüße
verano
 
Zuletzt bearbeitet von einem Moderator:
Welchen Rückgabetyp du nimmst, ist dir überlassen, du kannst auch p zurückgeben, aber vom Lesefluß her finde ich persönlich eine boolsche Variable besser.

Die Deklaration der Variablen erfolgt so, dass ihr Scope, das heißt ihre Sichtbarkeit/Reichweite/Aktionsradius möglichst gering ist. p benötigst du nur in der Methode, also kannst du es auch in der Methode deklarieren.

In eine eigene Methode auslagern würde so aussehen:

Java:
import java.io.*;
 
public class Kontrollstrukturen {
 
  public static void main(String[] args) throws IOException {
 
     
  BufferedReader in = new BufferedReader(new InputStreamReader(System.in));  
   System.out.println("String eingeben:");     
   String s = in.readLine(); 
    System.out.println("Char eingeben:");
   Char c = (char) in.readLine().charAt(0); 

boolean letterFound = searchLetter(s,c);


    if(letterFound){  
      System.out.println("Nicht gefunden");
    }
    else {   
      System.out.println("Position: " + p); 
 
    }

}
public static boolean searchLetter(String s, char c){
      int p = -1;    
  

 
    for(int i= 0; i<= (s.length()-1); i++)
 
    if(s.charAt(i)==c){ 
        p = i;
         return true;
    }
         return false;


 
 
  }
}

Wichtig: Die Methode darf nicht in der main selbst sein, sondern ist ein eigener "Block" innerhalb der Klasse.


P.S.: Wenn grad irgendwo Klammern fehlen oder die Einrückung seltsam ist, sorry, bin nicht am Rechner, aber vom Prinzip her funktionierts so.
 
Zuletzt bearbeitet:
Moin,

danke erstmal für die Antwort.
Nur bringt der jedesmal den fehler, dass ich P noch nicht initialisiert habe. bei boolean hat er mir nur die ganze zeit eine leere zeile rausgehauen, nachdem ich p nochmal im kopf deklariert habe. habe es jetzt so

[Java]
import java.io.*;

public class Kontrollstrukturen2 {

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

String zk;
char buchst;
int erg;

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

System.out.println("String eingeben:");
zk = in.readLine();
System.out.println("Char eingeben:");
buchst = (char) in.readLine().charAt(0);


erg = meth1(zk,buchst);
if (erg>=0)
System.out.println ("Pos.: "+erg);
else {
System.out.println("Nicht gefunden");
}


}
public static int meth1(String s, char c)

{
int p=-1;


for(int i= 0; i<= (s.length()-1); i++)

if(s.charAt(i)==c){
p = i;
break;
}




return p;

}




}
[/code]
 
Lieber verano, deine Lösung ist ok; die ein- oder andere Kleinigkeit ließe sich noch verbessern, aber für's erste: ok.
 

Zurück
Oben