Java: Methode richtig aufrufen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Die Methode main ist statisch, die Methode fak hingegen nicht. Das Konzept der Aufteilung zwischen statischen Inhalten und dynamischen, liegt in dem Konzept der Objektorientierung begründet. Java nutzt nur das objektorientierte Konzept, daher wirst du als Anfänger auch von Anfang an schon damit irgendwie konfrontiert.

Die Unterteilung erfolgt aus folgendem Gedanken: Probleme, die man mit einem Programm lösen möchte, werden wie in der realen Welt, durch Objekte beschrieben. Zu diesen Objekten gibt es Blaupausen (Klassen), die den Aufbau eines Objekts definieren. Da sich manche Objekte bestimmte Eigenschaften und Verhaltensweisen ausnahmslos teilen (Bsp.: alle roten Autos haben die Farbe rot), werden sie direkt an die Klasse gebunden (sind statisch). Andere Eigenschaften oder Verhaltensweisen, die von Objekt zu Objekt (der Klasse) unterschiedlich sein können, sind hingegen objektgebunden (dynamisch; Bsp.: nicht jedes rote Auto muss genau 4 Räder haben).

Statischer Inhalt wird dann erstellt, wenn die Klasse das erste Mal zur Laufzeit benutzt, also interpretiert wird. Dynamischer Inhalt hingegen wird erst angelegt, wenn eine Instanz (= ein Objekt) dieser Klasse erstellt wird. So gibt es einen zeitlichen Unterschied, wann main und fak bekannt sind. Letztere Methode wird dem Programm erst viel später bekannt gemacht.

Es gibt 2 Möglichkeiten, das Problem zu lösen.

Die einfachste Option ist es, die Methode auch als statisch zu definieren:

public static double fak(double x) { /* ... */  }

Die 2. Option ist das Anlegen einer Instanz deiner Klasse und der folgende Aufruf der Methode darüber:

Exercise2 exercise = new Exercise2();
double a = exercise.fak();

Für den Anfang würde ich dir empfehlen, die 1. Option zu wählen. Mit der OOP kannst du dich erst viel später genauer beschäftigen, wenn dir die absoluten Grundlagen erst einmal vertraut sind.

Dankeschön! Super Erklärung :) 

0

Die Methode fak() ist eine Objektmethode, welche also nur mit einer Instanz der Klasse Exercise2 aufrufbar ist.

Für den Anfang kannst du zu der Methode fak() static hinzufügen, dann ist es eine Klassenmethode. (public static...)

Füg noch das Wort "static" zum Methodenkopf hinzu:

public static double fak(double x){

Java: Wo ist der Fehler?

public class Uebergabe {   
  public static void main (String[] args) {
     System.out.println("Der Parameter war: " + args[0]);   
  } 
}
...zur Frage

Java frage zu boolean?

public static void main (string [] args){ System.out.println(welcheKleidung(false));}

public static String welcheKleidung (boolean esRegnet){ if (esRegnet){ return "regenjacken"} else { return "winterjacke"}

woher soll man hier nun wissen was raus kommt? es wurde ja nicht definiert , was false und was true ist?

...zur Frage

[Java] Fehler bei Fakultät/Multiplikation

Ich habe in Java mal kurz geschaut, wie man so eine Fakultät-Methode macht und habe als Vergleich noch mal das Gleiche "per Hand" dazu mit ausgegeben. Doch nun ist mir aufgefallen, das aber 13! es nicht mehr stimmt. Warum rechnet Java aber 13! falsch?

Der Code: public class Test8 {

public static void main(String[] args) {
    
    long f = fakulteti(13);
    System.out.println(f);
    
    long f2 = 1*2*3*4*5*6*7*8*9*10*11*12*13;
    System.out.println(f2);
}

private static long fakulteti(long i) {
    
    if(i == 1)
        return 1;
    else
        return  fakulteti(i-1) * i;
}

}

Vielen Dank für eure Hilfe :)

meins132

...zur Frage

Import bei "Throw new RuntimeException"?

public class RuntimeException {

public static void main(String[] args) {

int n = 5;

if (n==5) {

throw new RuntimeException();

}

else {

System.out.println("richtig");

...zur Frage

Java Collections Vererbung?

Meine Frage bezieht sich auf die Programmiersprache Java. Und zwar gibt es in Java ja verschiedene Collections wie z.B. List, Map etc. Ich habe nun eine Aufgabe bekommen in der ich Lücken ausfüllen muss (siehe Code unten). Die Methode fill könnte ich theoretisch mit List füllen, das Problem taucht dann natürlich in der Main-Methode auf, weil dort nicht nur List sondern auch ein TreeSet benutzt wird. Meine Frage kann man eine Oberklasse nehmen, welche sowohl für LinkedList als auch für TreeSet gilt?

import java.util.;

public class Aufgabe2 {

   public static _______ fill(________ x) {

      x.add("DSDS");

      x.add("SWT");

      x.add("Analysis");

      x.add("SWT");

      return x;

   }

   public static void main(String[] args) {

    ______ y;

      // b)

      y = fill(new LinkedList<String>());

      for (Iterator it = y.iterator(); it.hasNext();)

         System.out.println(it.next());

      // c)

    y = fill(new TreeSet<String>());

      for (Iterator it = y.iterator(); it.hasNext();)

         System.out.println(it.next());

   }

}


...zur Frage

Java Anfang Fehlermeldung undkeine Lösung!

Servus, habe hier mal Code geschrieben (aus dem Buch ):

public class Factorial {

public static void main (String[] args)
{
    int input = Integer.parseInt(args[0]);
    double result = factorial(input);
    System.out.println(result);
}
public static double factorial (int x)
{
    if (x<0) //kleiner
    {
        return 0.0;
    }
    double fact = 1.0;
    while (x>1) //größer
    {
        fact = fact *x;
        x = x - 1;
    }
    return fact;
}

}

Der Fehler ist: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at Factorial.main(Factorial.java:5)

Laut deversen Forum Infos: -Ihr versucht, auf ein Array Feld zuzugreifen, was außerhalb der Größe des Arrays liegt. -Sucht in der angegeben Zeile nach dem Zugriff auf das Array und stellt fest, warum der Index zu groß geworden ist. -"Printline-Debugging" hilft (Index vor jedem Zugriff ausgeben)!

Doch ich kann das Problem nicht lösen....

Danke für eure Hilfe

...zur Frage

Was möchtest Du wissen?