ja ja schon wieder einer mit einer public static void main(string[] args) Frage...

Sorry, dass ich nerven muss.
Aber ich hangel mich grad durch die oracle tutorials und nachgestellte Übung hat in meinem Hirnkasten folgende Frage generiert: Wieso kann public static void main(string[] args) in der Übung nicht anstelle in der Bicycle2 Klasse in der Bicycle Klasse stehe ohne dass es Fehler beim kompilieren gibt. Ich meine beide klassen haben doch keine return Anweisung und es könnte dem Kompiler doch egal sein wo er einsteigt.

Verflixt!

Code der funktioniert:

Java:
class Bicycle { 


    int cadence = 0;
    int speed = 0;
    int gear = 1;


    void changeCadence(int newValue) {
         cadence = newValue;
    }


    void changeGear(int newValue) {
         gear = newValue;
    }


    void speedUp(int increment) {
         speed = speed + increment;   
    }


    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }


    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }


}

class Bicycle2 { public static void main(String[] args) {
     // Create two different 
        // Bicycle objects
        Bicycle bike1 = new Bicycle();
        Bicycle bike2 = new Bicycle();


        // Invoke methods on 
        // those objects
        bike1.changeCadence(50);
        bike1.speedUp(10);
        bike1.changeGear(2);
        bike1.printStates();


        bike2.changeCadence(50);
        bike2.speedUp(10);
        bike2.changeGear(2);
        bike2.changeCadence(40);
        bike2.speedUp(10);
        bike2.changeGear(3);
        bike2.printStates();
    }}
 
Zuletzt bearbeitet von einem Moderator:
Klar geht das einfach die main in Bicycle schieben:

Java:
class Bicycle {

  int cadence = 0;
  int speed = 0;
  int gear = 1;

  void changeCadence(int newValue) {
    cadence = newValue;
  }

  void changeGear(int newValue) {
    gear = newValue;
  }

  void speedUp(int increment) {
    speed = speed + increment;
  }

  void applyBrakes(int decrement) {
    speed = speed - decrement;
  }

  void printStates() {
    System.out.println("cadence:"
            + cadence + " speed:"
            + speed + " gear:" + gear);
  }

  public static void main(String... args) {
    Bicycle bike1 = new Bicycle();
    Bicycle bike2 = new Bicycle();

        // Invoke methods on 
    // those objects
    bike1.changeCadence(50);
    bike1.speedUp(10);
    bike1.changeGear(2);
    bike1.printStates();

    bike2.changeCadence(50);
    bike2.speedUp(10);
    bike2.changeGear(2);
    bike2.changeCadence(40);
    bike2.speedUp(10);
    bike2.changeGear(3);
    bike2.printStates();
  }
}
 
Sorry @Flown , ja so würde es wohl gehen aber die Fraeg ist eigentlich wieso kann ich dass public static void main(String[] args) teil nicht wie folgt platzieren:


Java:
class Bicycle { public static void main(String[] args)  {


    int cadence = 0;
    int speed = 0;
    int gear = 1;


    void changeCadence(int newValue) {
         cadence = newValue;
    }


    void changeGear(int newValue) {
         gear = newValue;
    }


    void speedUp(int increment) {
         speed = speed + increment;   
    }


    void applyBrakes(int decrement) {
         speed = speed - decrement;
    }


    void printStates() {
         System.out.println("cadence:" +
             cadence + " speed:" + 
             speed + " gear:" + gear);
    }


}}

class Bicycle2 { 
     // Create two different 
        // Bicycle objects
        Bicycle bike1 = new Bicycle();
        Bicycle bike2 = new Bicycle();


        // Invoke methods on 
        // those objects
        bike1.changeCadence(50);
        bike1.speedUp(10);
        bike1.changeGear(2);
        bike1.printStates();


        bike2.changeCadence(50);
        bike2.speedUp(10);
        bike2.changeGear(2);
        bike2.changeCadence(40);
        bike2.speedUp(10);
        bike2.changeGear(3);
        bike2.printStates();
    }
 
Zuletzt bearbeitet von einem Moderator:
bitte java -Tags benutzen (über erweitert) oder selber schreiben [J AVA][/ JAVA] (ohne leerzeichen)

so wie ich das sehe implementierst du methoden in der main die du dann später aufrust, zieh diese aus dem rumpf der main in den rumpf der klasse Bicycle
 
Dein Problem ist, dass du Anweisungen außerhalb von MEthoden verwednen willst:
Java:
class Bicycle2 { 
// Create two different 
// Bicycle objects
Bicycle bike1 = new Bicycle();
Bicycle bike2 = new Bicycle();


// Invoke methods on 
// those objects
bike1.changeCadence(50);
bike1.speedUp(10);
bike1.changeGear(2);
bike1.printStates();


bike2.changeCadence(50);
bike2.speedUp(10);
bike2.changeGear(2);
bike2.changeCadence(40);
bike2.speedUp(10);
bike2.changeGear(3);
bike2.printStates();
}
Den Kram darfst du nur innerhalb von Methoden machen:
Java:
class Bicycle2 { 
// Create two different 
// Bicycle objects
Bicycle bike1 = new Bicycle();
Bicycle bike2 = new Bicycle();


public void xyz() {
  // Invoke methods on 
  // those objects
  bike1.changeCadence(50);
  bike1.speedUp(10);
  bike1.changeGear(2);
  bike1.printStates();


  bike2.changeCadence(50);
  bike2.speedUp(10);
  bike2.changeGear(2);
  bike2.changeCadence(40);
  bike2.speedUp(10);
  bike2.changeGear(3);
  bike2.printStates();
 }
}
 
Zuletzt bearbeitet:
@strusl :sorry fuer vergessen des java tags, dein vorschlag funktioniert bei mir leider nicht kannst du mir da vielleicht den code posten?
@InfectedBytes: das musst du oracle erzählen der code ( https://docs.oracle.com/javase/tutorial/java/concepts/class.html ) ist von ihren tutorial und die haben dass ohne public void gemacht.

Kann ich für mich jetzt zusammenfassen dass man in der main keine methoden implementieren darf? warum? argh
 
Zuletzt bearbeitet:
Das public ist nicht das entscheidende.
Der ausführbare Code, wie z.b.
Java:
  bike1.changeCadence(50);
  bike1.speedUp(10);
  bike1.changeGear(2);
  bike1.printStates();
muss innerhalb einer Methode stattfinden.
Im Beispielcode wird das eben in der der main methode gemacht, du hast jedoch einfach die Methode drumherum weggelassen

Kann ich für mich jetzt zusammenfassen dass man in der main keine methoden implementieren darf? warum? argh
die main ist doch eine Methode. In welcher Klasse die Definiert wird ist egal.
Das Problem deines codes ist eben das was ich eben geschrieben hab
 
Zuletzt bearbeitet:
Ok danke leute! ich habe es dank euch geschnallt. Ist mein zweiter Java tag und ich muss sagen ich bin mal gespannt ob ich dass bis zur einschreibung auf dem kasten hab....also nochmal merci an euch
 

Zurück
Oben