Int aus anderer .java datei?

hi, ich fange an java zu verstehen, zumindens glaub ich das, :wink:

ich möchte eine int aus einer anderen class eines projektes nutzen… jedoch scheiter ich daran…

ich habe folgenden code:


public class Variable {       
     public int v_eins = (0);
     public int v_zwei = 15;  
}

und


public class TestFürClassen {
  
    public static void main(String[] args) {
        
         if (variable.v_zwei <=0)    
               {System.out.println ("jep, ich verstehs!");}
    }
}```

was ist an meiner logik falsch? ich dachte wenn die beiden classes im gleichen package sind muss ich nur den variablen namen nutzen...:rolleyes:

Du musst die Klasse Variable erstmal instanzieren.

Außerdem solltest du nicht direkt auf deine Variable (die private sein sollte) zugreifen, sondern über getter bzw. setter.

danke für die rasche antwort, muss erst mal googeln was du mit instanzieren meinst… danke schon mal vorab =)

genau, du brauchst ersteinmal ein Objekt der Klasse Variable.
Variable ist einfach nur eine art „vorlage“, um Objekte dieser zu erstellen. Dh du kannst
1000 verschiedene Variable objekte erstellen und jedes dieser ist gleich aufgebaut, und hat die variablen v_eins und v_zwei.
Das geht einfach so:

/* Variable: welche Klasse, dh welcher Typ 
 * var: einfach nur der name des objekts, kan auch peter sein
 * = : spricht für sich selbst
 * new Variable(): neues objekt von klasse Variable
*/

dann kanst du einfach mt var.v_zwei darauf zugreifen.
Was Orothred meint mit getter und setter, lass dich davon erstmal - nicht verwirren das kommt später :wink:
und wieso eigenlich = (0) ? = 0 reicht doch. und… 15 ist niemals <= 0 :smiley:

ui danke mymaksimus,

ich habe so meine probleme mit meinen alten 27 jahren hust das zu verstehen, versuch das jetzt zu verstehen, wie das alles zusammen hängt…

das mit den klassen kann ich mir so vorstellen als hätte ich ein lexikon, mit hilfe von objekten ich eine passage/ zeile nutzen kann, ich hoff ich hab das wenigstens gerafft… :rolleyes:

EDIT:

was stimmt da ez net o.O ?



public class TestFürClassen {

   
    public static void main(String[] args) {
        
   if (var.v_eins >=0)    
{System.out.println ("jep, ich verstehs!");}
}
}```

und

```package testfürclassen;


public class Variable {
    
   Variable var = new Variable();
/* Variable: welche Klasse, dh welcher Typ
 * var: einfach nur der name des objekts, kan auch peter sein
 * = : spricht für sich selbst
 * new Variable(): neues objekt von klasse Variable
*/
   
public int v_eins = 0;
public int v_zwei = 15;
   
   

}

Du musst das Objekt auch in der Klasse verfügbar haben in der du sie benutzen möchtest.
Erstell also in deiner main Methode ein Objekt deiner Klasse Variable, über das du dann auf v_eins und v_zwei zugreifst.
Wenn Google den Link zu einem Suchergebnis auf der Seite des Suchergebnisses platzieren würde ohne dich erstmal dahin zu verweisen würdest du ihn auch nicht finden. (Um es mal an einem Beispiel (hoffentlich) etwas verständlicher zu machen) :wink:

habs gerade durch testen verstanden :wink:

bsp:

Daten Name = new Daten ();

Daten.java + Namen = neu verknüpfen mit Daten ();

das ist meine art des verstehens :wink:

abrufen dann über Namen.VariableAusDaten …

also ich habs kapiert, geht auch gut =) das oben soll nur vll einen helfen der denkt wie ich XD und auch es verstehen will :stuck_out_tongue:

aber vielen dank euch =)

Ok also ich erklärs dir noch einmal genauer:

Wir haben folgende Klassen:

[ul]
[li]Start[/li][li]Auto[/li][li]Rad[/li][li]Tür[/li][li]Scheibenwischer[/li][/ul]

Okay, die Struktur ist klar: Wir brauchen ein Auto, und unser Auto braucht vier Räder, zwei Türen und zwei Scheibenwischer.
In der Klasse Start wollen wir 3 solcher Autos erzeugen.
fangen wir einfach mal - Klasse Start:

//unsere Klasse, in der alles beginnt
public class Start {

    //die Hauptmethode, die beim Starten des Programms aufgerufen wird
    public static void main(String[] args){
        //wir erzeugen hier 3 Autos: autoFritz, autoHans, autoPeter
        Auto autoFritz = new Auto();
        Auto autoHans = new Auto();
        Auto autoPeter = new Auto();
        //damit hätten wir 3 gleiche Autos, die nur unterschiedliche namen haben
    }
}

So weit so gut, das sollte verständlich sein.
Nun werfen wir einen Blick auf die Klasse Auto:

//Klasse Auto
public class Auto {
    
    //das ist der konstruktor dieser klasse, er wird aufgerufen bei new Auto()
    public Auto(){
        //erzeugung von vier rädern:
        Rad radVorneLinks = new Rad();
        Rad radVorneRechts = new Rad();
        Rad radHintenLinks = new Rad();
        Rad radHintenRechts = new Rad();
        //erzeugung von zwei Türen
       Tuer tuerLinks = new Tuer();
       Tuer tuerRechts = new Tuer();
       //erzeugung von zwei Scheibenwischern
       Scheibenwischer wischerVorne = new Scheibenwischer();
       Scheibenwischer wischerHinten = new Scheibenwischer();
    }
}

So weit so ebenfalls gut, unser auto ist erzeugt. Nun die Klasse Rad die eine Variable groesse besitzt, Tuer die eine Variable aufmachbar besitzt, und Scheibenwischer die eine variable
Laenge besitzt:

public class Rad {
 
    public Rad(){
        //das ist ein Rad
        //die variable groesse
        int groesse = 30;
    }
}
public class Tuer {
     
    public Tuer(){
        //das ist eine tuer
        //die variable aufmachbar (true | false) bedeutet soviel wie (ja | nein) oder (1 | 0) und boolean beschreibt einfach diesen typ
        //hiermit sagen wir das man die tuer aufmachen kann - also aufmachbar ja ist
        boolean aufmachbar = true;
    }
}
public class Scheibenwischer {
    
    public Scheibenwischer(){
        //das ist ein scheibenwischer
        //die variable laenge - float weil ich eine kommazahl will und es meter sein soll, es kann ja auch sein das wir zentimeter haben, wie hier: 1.5 also 1,50 meter
        float laenge = 1.5;
    }
}

und nochmal so weit so gut.
Nun, werfen wir nochmal ein blick auf die klasse start - was machen wir jetzt wenn wir zum beispiel
die reifengroesse vom auto von hans haben wollen?
Man könnte meinen:

autoHans.radVorneRechts.groesse

aber das geht natürlich nicht. Also machen wir, wie du auch schon getan hast eine instanz variable groesse, die also von überall her aufrufbar ist:

public class Rad {
    
    //allgemein sichtbare variable rad, die wir hier nur deklarieren, (also sagen das es sie gibt) ...
    int groesse;

    public Rad(){
         //...... und hier sagen welchen wert sie hat:
         groesse = 30;
    }
}

nun, es wird aber immer noch nicht klappen, da wir ja in autoHans auch die ganzen variablen unsichtbar sind. also bauen wir es so um:

public class Auto {

     //allgemein sichtbare variablen..
     Rad radVorneLinks;
     Rad radVorneRechts;
     //und so weiter mit allen...

     public Auto(){
         //und weisen hier wieder die werte zu
         radVorneLinks = new Rad();
         //... und so weiter.
     }

nun, jetzt können wir in der klasse Start, weil dort ja die drei objekte vom auto liegen einfach sagen:

autoHans.radVorneLinks.groesse

wenn wir jetzt auch die Tuer so umbauen, das aufmachbar sichtbar ist,

public class Tur {
    
     boolean aufmachbar;

     public Tuer(){
         aufmachbar = true;

//....

dann könnten wir in start sogar folgendes machen:

if(autoPeter.tuerLinks.aufmachbar){
    //mache die linke tuer auf
}
else{
    //melde, das die linke tuer geschlossen bzw nicht aufmachbar ist und gucke ob die rechte tuer auf ist:
    if(autoPeter.tuerRechts.aufmachbar){
         //mache halt die rechte tuer auf
    }
    else{
         //oder melde das beide tueren geschlossen sind.
    }
} 

Ist das einiger massen verständlich? :slight_smile:

Gute ausführliche Erklärung würd ich sagen.
Nur man sollte eben nicht direkt auf die Variablen zugreifen, sondern getter und setter nutzen.
Also sagt das Auto zum Rad, gibt mir deine … (Schnelligkeit, Drehrichtung etc) → getGeschwindigkeit(), getRichtung()
Oder das Auto fragt die Tür ob sie offen oder zu ist … usw
Das kann man auch gleich zu Anfang lernen. :slight_smile:

Ebenso kann man und sollte man auch direkt auf korrekte Schreibweise achten →

ja vielleicht hast du recht.

Sprechende namen sind sehr wichtig, habe ich jetzt oben vielleicht nicht so sehr drauf geachtet.
Na gut, dann mach du halt mal ein beispiel für getter und setter

zu den variablen namen: ist nicht camelCase richtig? Also

  • movementManager
  • powerControl
  • classLoader

?

und klassennamen gross… hab ich ja aber gut das du es explizit erwähnst!

Das war weniger an dich mymaksimus, dass war eher Allgemein worauf man neben gettern/settern noch achten sollte. :slight_smile: Hätte ich vielleicht dazuschreiben sollen ^^ und ja natürlich camelCase variablen und CamelCase Klassennamen ^^
Da oben schon Sachen standen wie „v_eins“ oder
„Daten Name = new Daten ();“
„Namen.VariableAusDaten“

Daneben ist natürlich codeformatierung auch wichtig. Solche Sachen sollte man sich gleich am Anfang angewöhnen, das hilft meist bei der Fehlerfindung und man muss sich später nicht wieder umgewöhnen oder bekommt später hier im Forum eine drauf, weil niemand den Code lesen will/kann ^^

[QUOTE=MiMi]Das war weniger an dich mymaksimus, dass war eher Allgemein worauf man neben gettern/settern noch achten sollte. :slight_smile: Hätte ich vielleicht dazuschreiben sollen ^^ und ja natürlich camelCase variablen und CamelCase Klassennamen ^^
Da oben schon Sachen standen wie „v_eins“ oder
„Daten Name = new Daten ();“
„Namen.VariableAusDaten“

Daneben ist natürlich codeformatierung auch wichtig. Solche Sachen sollte man sich gleich am Anfang angewöhnen, das hilft meist bei der Fehlerfindung und man muss sich später nicht wieder umgewöhnen oder bekommt später hier im Forum eine drauf, weil niemand den Code lesen will/kann ^^[/QUOTE]

schon klar dass das allgemein war,
aber ich hab nur mit meinem abgeglichen :slight_smile:

Also mit einem getter, nur nen kleines Beispiel:

//Klasse Auto
public class Auto {
    private String farbe;
    ...

    public Auto(String farbe){
        this.farbe = farbe;
    }


    public String getFarbe(){
        return farbe;
    }
}

Dann beim Erzeugen vom Auto gibt man direkt die Farbe mit, denn wenn ein Auto erstellt wird, hat es ja bereits eine Farbe

    Auto autoFritz = new Auto("blau");
    Auto autoHans = new Auto("gelb");
    // jetzt können wir den getter nutzen um die Farbe herrauszubekommen
    System.out.println("Fritz Auto hat die Farbe: " + autoFritz.getFarbe());
    System.out.println("Hans Auto hat die Farbe: " + autoHans.getFarbe());

Nun könnte man noch setter benutzen um die Farbe zu ändern

    public void setFarbe(String farbeNeu){
        this.farbe = farbeNeu;
    }

Wenn man jetzt die Farbe ändern möchte sieht das so aus

    Auto autoFritz = new Auto("blau");
    Auto autoHans = new Auto("gelb");
    // jetzt können wir den getter nutzen um die Farbe herrauszubekommen
    System.out.println("Fritz Auto hat die Farbe: " + autoFritz.getFarbe()); // er gibt blau aus
    System.out.println("Hans Auto hat die Farbe: " + autoHans.getFarbe()); // er gibt gelb aus

    // auto umlackieren
    autoFritz.setFarbe("schwarz");
    System.out.println("Fritz Auto hat die Farbe: " + autoFritz.getFarbe()); // jetzt gibt er schwarz aus

Ansonsten einfach mal die Insel anschauen/durcharbeiten
http://openbook.galileocomputing.de/javainsel/index.html

OHA danke :stuck_out_tongue:

ihr habt ja voll den plan :eek:

Das druck ich mir gleich mal ( ja einigen lachen ez… DRUCKEN ) :twisted:

nun taste ich mich stück für stück an diese anspruchsvolle sprache heran…

ich möchte ein JFrame fenster haben(wenns dafür geeignet ist), indem ein (oder mehrere) Werte angezeigt werden. (Volt Ampere Watt usw.)
die werte sollen im 500 m.sec takt automatisch erneuert werden.

mache ich das erneuern mit einer while schleife? ich habe schon mit einem arduino board gearbeitet, was ich so naja eher amateur-haft konnte…(aber es ging)

bitte reißt mir den kopf nicht ab :idea::noe:

als nächstes was ist die beste Möglichkeit den text zu generieren ? ist da JFrame überhaupt gedacht dafür ?:rtfm:

ich hoffe das ihr mir weiterhelfen könnt :slight_smile:

als letztes, was sollte ich mir genauer anschauen wenn ich ne grafische ausgabe haben will, in der Richtung

http://www.wut.de/kpics/e-5764w-15-grww-000.jpg

Hi!
Ich würde dir vorerst raten, nur Konsolenausgaben zu benutzen, ist einfache :wink:
Später machst du es dann grafisch mit dem JFrame.
Text ausgeben einfach über System.out.println(„Text“);
Das mit der while-Schleife sollte schon so richtig sein.

LG