Aufgabe: Eine Klasse und viele Untermethoden

Hallo,
hab eine Aufgabe die lautet:
Schreibe die Klasse MethodenTest mit der Hauptmethode main in der folgende Untermethoden nacheinander aufgerufen werden.

  1. sagHallo welche in der Konsole den Text Hallo anzeigt
und so weiter

Meine Fragen sind:
- ich muss alles in eine Klasse schreiben und dann unten die main Methode ausführen mit den Methodenaufrufen ?
-ich habe ja nur eine Klasse, muss ich dann vor den methoden einen Zugriffsmodifizierer setzen? public, private oder welchen?

Hab nur das bis jetzt
Java:
public class MethodenTest {

   public static void main(String[] args) {
       
       sagHallo(){
           
           System.out.println("Hallo");
       }
   }
}
 
Die Aufgabe ist wie immer sehr allgemein formuliert und lässt verschiedene Implementierungen zu.
Prinzipiell geht es darum, dass die main-Methode andere Methoden (wie z.B. "sagHallo" aufruft). Das heisst den Code dieser Methode solltest du aus der Main-Methode auslagern.
Was man dann noch machen kann ist, man erzeugt in "main" ein Objekt "MethodenTest" und ruft die "sagHallo" - Methode darüber auf. Das hat natürlich Einfluss auf die Zugriffsmodifizierer.
 
Zuletzt bearbeitet:
Du *musst* keinen Zugriffsmodifier setzen. Es ist aber best practise immer den mit der geringsten Sichtbarkeit zu nehmen wie möglich. In deinem Fall also private weil die Methode nur in der eigenen Klasse aufgerufen wird.

Hast du dein Programm mal versucht zu compilieren? Nutzt du eine IDE? Das müsste dir eigentlich Syntaxfehler schmeißen.
 
ok,
stehe auf der Leitung...

anbei ein Bild aus meinem Eclipse, da sind lauter Fehlermeldungen die ich nicht in meinem Kopf compilieren kann (oder so 😀)
 

Anhänge

  • 2.PNG
    2.PNG
    47,3 KB · Aufrufe: 77
ich denke nach, aber das mit dem static habe ich noch nicht verstanden, ich verstehe es in diesem Programm nicht,
ich weiss dass static variablen und methoden nur für die Klasse in der sie sich befinden gelten...aber ich komme nicht drauf was das in diesem Programm bedeutet,
 
ok es hat jetzt geklappt, der Text Hallo wurde ausgegeben...

habe die methode private void sagHallo() in private static void sagHallo()
geändert, aber warum musste ich das machen? das verstehe ich nicht
 
ich weiss dass static variablen und methoden nur für die Klasse in der sie sich befinden gelten
Da solltest du dich noch mal hinsetzen und nachlesen was static wirklich bedeutet.

Warum die Methode static sein muss? Für den Anfang kannst du dir merken: gleiches zu gleichem. Wenn du in einer statischen Methode eine Methode aus der selben Klasse aufrufen willst, muss diese auch statisch sein. (gleiches gilt für globale Variablen)
Die eigentliche Erklärung ist etwas komplexer aber das solltest du verstehen sobald du verstanden hast was static eigentlich bedeutet.
 
Schau mal hier um das Problem zu lösen:
https://learn-java-by-example.com/java/fix-cannot-static-reference-non-static-method/

Generell musst du mal schauen, dass du eine gute Erklärung für static Modifier findest. Es ist nicht ganz leicht zu verstehen am Anfang. Prinzipiell kann man sagen, dass static Variablen und Methoden ohne ein speziell erstelltes Objekt der umgebenden Klasse aufgerufen werden können.

Mitunter auch ein Grund warum die main-Methode static sein muss.
 
Also wenn es nur darum geht in der main mehrere Methoden aufzurufen kannst du erst einmal auf das Setzen von private und public verzichten finde ich. Belass es bis auf weiteres erst Mal auf public. Und dann kannst du weiter unten weitere Methoden schreiben, die du dann in der main aufrufen kannst.
 

Anhänge

  • saghallo.jpg
    saghallo.jpg
    44,2 KB · Aufrufe: 58
ja ich versuche grade das static zu verstehen, echt schwierig, etwas das mit static bezeichnet wurde, behält seine Werte dauernd in der Memory bis sie geändert werden richtig?

Hier ist noch das gesamte Aufgabenblatt,
 

Anhänge

  • tp34.PNG
    tp34.PNG
    115,9 KB · Aufrufe: 45
Java:
public class MethodenTest {

   
   private static void sagHallo(){
       
       System.out.println("Hallo");
   }
   
   
   private static void sagHallo(String a){
       
       System.out.println("Hallo " + a + "wie gehts?");
   }
   
   private static void leerZeile() {
       System.out.println();
   }

   private static int quadrat(int seite) {
       int area;
       area= seite*seite;
       return area;
   }

   public static void main(String[] args) {
       
   
       sagHallo();
       leerZeile();
       sagHallo("Ben, ");
       leerZeile();
       quadrat(5);
       System.out.println("Das Quadrat von" + seite + "hat den Wert"+quadrat(5));
       
       
   }

}

und die Error-Message
Java:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
   a cannot be resolved to a variable

   at tp0304.MethodenTest.main(MethodenTest.java:35)

was muss ich machen? hab schon rumprobiert, ich komm nicht drauf
 
Die Fehlermeldung passt nicht zum Code...

Die richtige wird die Variabel seite in main anmeckern, die Variable gibts in der Methode ja nicht, sondern nur in quadrat
 
ok ich habe ein neues Projekt erstellt in dem ich simple Programme teste
könnt ihr mir bitte sagen was hier falsch ist?
Ich rufe die methode calculation doch in der print Methode auf, warum geht das nicht wenn ich Klassenname.methode benutze?
Java:
package hmmm;

public class Hmmmm {
  
   public int calculation(int a) {
      
       return a;
   }
  
   public static void main(String[] args) {
      
      
       System.out.println(Hmmmm.calculation(5));
      
      
   }

}

Eclipse sagt als Fehlermeldung dass die methode calculations nicht statisch ist, aber gerade das wollte ich lösen indem ich den Klassennamen dann Punkt dann den Methodenname schreibe
 
Du kannst nur static über die Klasse ansprechen, so wie du es grad tust.

Für Dinge die nicht static sind, brauchst du ein Objekt.
 
ok Danke

Ich bräuchte auch Hilfe bei der Aufgabe 5

ist damit gemeint, alle argumente bis jetzt , der Methoden, oder auch die nachfolgenden Argumente der Methoden der nachfolgenden Aufgaben?
 

Anhänge

  • tp34.PNG
    tp34.PNG
    115,9 KB · Aufrufe: 41
Wie kommst du dann auf manipulieren? 😉

Wie soll denn laut Aufgabenstellung die Methode heißen und welche Parameter soll sie bekommen?
 
anzeigenArgumente die alle Argumente des Programms anzeigt: sie benutzt dafür als Parameter dieselben Argumente wie main() : String[] args
(args.length gibt die Anzahl der Argumente an, benutzt dafür eine for Schleife bei der der Index für die Tabelle args von o bis args.length variiert)

anzeigenArgumente(String[] args)?
 

Zurück
Oben