Variablen übergeben

ankmanu

Bekanntes Mitglied
Hi,

wie kann ich in folgendem Code die Variablen x und y an die nächste klasse übergeben, sodass ich mit ihnen dort weiterrechnen kann?
Java:
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class ImagePixelReader {

public ImagePixelReader() throws Exception {
System.out.println("Klasse ImagePixelReader gestartet");


        System.out.println("Einlesen des Bildes...");
        BufferedImage img = ImageIO.read(new File("c:/a.jpg"));                                /**Das Webcambild wird geladen */
       
        for (int x = 0, maxX = img.getWidth(); x < maxX; x++) {                                 /** Die rgb-Werte aller Pixel werden ausgelesen */
            for (int y = 0, maxY = img.getHeight(); y < maxY; y++) {
        
        int rgb = img.getRGB(x, y);
        Color c = new Color(rgb);
        
        if(c.getRed()>200 && c.getRed()<=255 && c.getGreen()>100 && c.getGreen()<=255 && c.getBlue()>=0 && c.getBlue()<=70){
            System.out.println("x: "+x);
            System.out.println("y: "+y);
            System.out.println("Red: " + c.getRed());
            System.out.println("Green: " + c.getGreen());
            System.out.println("Blue: " + c.getBlue());
            /**Von hier aus sollen die Variablen x und y dann in die nächste Klasse  */                         /**(Roboterpositionierung)übergeben werden!*/
            }
        }}
      
      
     try {
     Roboterpositionierung rp = new Roboterpositionierung ();}
     catch(Exception e){
                System.out.println("Klasse Roboterpositionierung konnte nicht geladen werden!!!");}
               
     boolean success = (new File("c:/a.jpg")).delete();
    if (!success) {
        System.out.println("Deletion of a.jpg failed!");                                      /** ENDE */
    }
    }  
}
Kann ich das mit einem Array realisieren? Und wenn ja, wie?

Vielen Dank im Vorraus
manu
 

hdi

Top Contributor
Weisst du, was Methoden sind? Eine solche brauchst du, um diese Werte weiterzureichen. Alternativ kannst du auch einen Konstruktor in der anderen Klasse anbieten, der zwei int-Werte will (x und y). Kann man jetzt ohne Kontext nicht sagen, was besser geeignet ist.

Aber Vorsicht: "Weiterrechnen" kannst du dann in der anderen Klasse nur insofern, dass du diese Werte benutzen, d.h. lesen kannst. Du kannst sie aber nicht nach außen hin ändern, da Java per Call-By-Value arbeitet und primitive Datentypen (wie es int einer ist) keine Referenz, sondern direkt einen Wert abspeichern.

D.h.:

Java:
/* Konstruktor von Klasse B: */
public B(int x, int y){
  x = 1;
  y = 2;
}

Java:
/* Code in Klasse A */
int x = 5;
int y = 6;
new B(x,y);
// x und y sind noch immer 5 bzw 6, da Java nur Kopien von Variablen-Werten weiterreicht!

Wenn du willst, dass Klasse A die beiden Werte an Klasse B gibt, B diese ändert,und A danach mit den geänderten Werten weiterrechnet, musst du dir
1) entweder die errechnten Werte von B über Methoden zurückholen
2) oder x und y in ein Objekt packen, in diesem Fall würde sich Point anbieten:

Java:
/* Konstruktor von Klasse B: */
public B(Point p){
  p.x = 1;
  p.y = 2;
}

Java:
/* Code in Klasse A */
Point p = new Point(5,6);
new B(p);
// p.x und p.y sind jetzt 1 bzw 2 !! Bei Objekt-Variablen funktioniert sowas!
 
Zuletzt bearbeitet:

ankmanu

Bekanntes Mitglied
Also:
erstmal danke für die Antwort
Klasse 1 sieht (gekürzt) so aus:
Java:
public class ImagePixelReader {

public ImagePixelReader() throws Exception {
              BufferedImage img = ImageIO.read(new File("c:/a.jpg"));                        
       
        for (int x = 0, maxX = img.getWidth(); x < maxX; x++) {                               
            for (int y = 0, maxY = img.getHeight(); y < maxY; y++) {
        int rgb = img.getRGB(x, y);
        Color c = new Color(rgb);
        
        if(c.getRed()>200 && c.getRed()<=255 && c.getGreen()>100 && c.getGreen()<=255 && c.getBlue()>=0 && c.getBlue()<=70){
           
/**Hier sollen die Variablen dann übergeben werden*/
            
            }
        }}
     try {
     Roboterpositionierung rp = new Roboterpositionierung ();}
     catch(Exception e){
                System.out.println("Klasse Roboterpositionierung konnte nicht geladen werden!!!");}
               
    }  
}
Und Klasse 2 (gekürzt) so:
Java:
import ftcomputing.robo.*;

public class Roboterpositionierung {
    
    public Roboterpositionierung(){
}
    public static void main() {    
/**Hier soll jetzt x und y verwendet werden. */
/**z.B. if(x==200){System.out.println("x= "+x);} */

}
}
Wie kann ich nun x und y an Klasse Roboterpositionierung übergeben?
manu
 

ankmanu

Bekanntes Mitglied
danke,
doch wenn ich dann die Klasse ImagePixelReader starte, passiert folgendes:
-Klasse ImagePixelReader wird erfolgreich ausgeführt
-Bei dem Befehl
Java:
Roboterpositionierung.main(x,y);
werden die Variablen x und y an die Methode Main(int x, int y) in Klasse Roboterpositionierung übergeben.
-am Ende von Klasse ImagePixelReader wird Klasse Roboterpositionierung gestartet(und zwar so:
Java:
try {
     Roboterpositionierung rp = new Roboterpositionierung ();}
     catch(Exception e){
                System.out.println("Klasse Roboterpositionierung konnte nicht geladen werden!!!");}
)
-das klappt super
-in Klasse Roboterpositionierung wird nur die Nachricht "Klasse Roboterpositionierung gestartet" ausgegeben, doch die Methode main startet nicht (warum sollte sie auch).

So, nun zu meiner Frage:
Wie kann ich in Klasse Roboterpositionierung die Methode main starten, denn mit
Java:
main(x, y);
, mit
Java:
main(int, int);
und mit
Java:
main(int x, int y);
geht es nicht!
Hier nochmal der entsprechende Codeausschnitt:
Java:
public class Roboterpositionierung {
    
    public Roboterpositionierung(){
        System.out.println("Klasse Roboterpositionierung gestartet");
/**Hier soll jetzt die Methode main aufgerufen werden, wiegesagt geht das nicht mit main(x,y); */
}

public static void main(int x, int y){
//...
}
Also wie kann ich an der Stelle die Methode main starten??(ist bestimmt total einfach, nur ich weiß es halt net...)

Vielen Dank im Vorraus

Manu
 

hdi

Top Contributor
So wie ich es im letzten Post gemacht hab. Die Methode ist statisch. Alternativ (auch besser) machst du das "static" weg bei der main-Methode und rufst das dann so auf:

Java:
RoboterPositionierung robpos = new RoboterPositionierung();
robpos.main(x,y);

PS: Ich hab auch das GEfühl du hast den Link in meinem letzten Post nicht gelesen, sonst hättest du deine komischen - absolut falschen ;) - Versuche gar nicht erst versucht.
 

ankmanu

Bekanntes Mitglied
Danke für die schnelle Antwort

aber wenn ich das so mach wie du´s gesagt hast (also die Methode main nicht statisch), dann kommt beim Kompilieren in Klasse ImagePixelReader der Fehler
"non-static method main(int,int) can not be referenced from a static context". dabei ist die klasse imagePixelReader doch gar nicht statisch?

Viele Grüße

Manu
 

hdi

Top Contributor
Also erstmal: Statisch/nicht-statisch gibt's nur bei Methoden und Variablen, nicht bei ganzen Klassen.
- Ja, dein Code in der ImagePixelReader ist in deinem Fall im Konstruktor, der ist immer nicht-statisch
- Dann hast du jetzt aber wohl meine letzten beiden Posts "vermischt".

Also, es gibt 2 Varianten:

Variante A:
main statisch machen und dann einfach:
Java:
RoboterPositionierung.main(x,y);

Variante B:
main nicht statisch machen und dann:
Java:
RoboterPositionierung robpos = new RoboterPositionierung();
robpos.main(x,y);

PS: Und vergiss nicht die Dateien vor dem Kompilieren immer abzuspeichern!
 

ankmanu

Bekanntes Mitglied
danke für die Antwort,

aber ich hab jetzt mal Variante A genommen(main statisch).
Das Problem liegt nicht bei der Übergabe der Variablen von Klasse zu Klasse, sondern dabei, dass wenn dann die Klasse Roboterpositionierung gestartet wird (durch den Code
Java:
 Roboterpositionierung rp = new Roboterpositionierung ();
) NUR das public Roboterpositionierung gestartet wird und NICHT automatisch die Methode main.
Deshalb wollte ich die Methode main in public Roboterpositionierung starten, und zwar (wie du sagtest)mit
Java:
main(x,y);
.
Doch wenn ich das schreibe, kommt folgende Fehlermeldung: "cannot find symbol - variable x"
Das ist so, weil ja erst die Methode main die Variablen bekommt und zu dem Zeitpunkt wo die Methode main in public Roboterpositionierung aufgerufen wird die Variablen x und y noch nicht "bekannt" sind!

Wie kann ich das umgehen?

Viele Grüße

manu
 

hdi

Top Contributor
edit:

Jetzt hab ich deinen Post verstanden ;)
Also.. ich hab dir doch schon 2x den Code gegeben, einfach Copy&Paste:

Java:
// im Konstruktor von ImagePixelReader !!!!
int x = ...
int y = ...
...
RoboterPositionierung robpos = new Roboterpositionerung();
robpos.main(x,y); // <-- !!!

Ja, im Konstruktor passiert noch nix, du machst dir nur das Objekt. Aber danach kannst du auf dem Objekt die Methode aufrufen, also ist doch kein Problem. Wie ich auch schon sagte, kannst du das ganze auch in den Konstruktor übergeben und die main-Methode weglassen. (Siehe Post irgendwo weiter oben)

Auf jeden Fall musst du folgendes Lesen & Verstehen:

Eins
Zwei
Drei

Oder Google nach "Java ist auch eine Insel", das ist ein kostenloses und sehr umfangreiches Einstiegs-E-Book. Da solltest du mal die ersten paar Kapitel lesen.
 
Zuletzt bearbeitet:

ankmanu

Bekanntes Mitglied
Hi,

nochmals danke, abe folgendes klappt nicht:
Das Problem liegt NICHT bei der Übergabe der Variablen!(Das hat sehr gut geklappt so wie du es mir erklärt hast)
Sondern das Problem liegt dabei, das ich die Methode main(int x, int y) im Konstruktor von Roboterpositionierung NICHT aufrufen kann, denn der Code sieht wie folgt aus:
Java:
public class Roboterpositionierung {
    
public Roboterpositionierung(){
        System.out.println("Klasse Roboterpositionierung gestartet");
       /**Hier soll die METHODE main gestartet werden! */
}

public static void main(int x, int y){                                                                 
        System.out.println("x= "+x);
        System.out.println("y= "+y);
}
Bei "Hier soll die METHODE main gestartet werden!" habe ich folgendes ausprobiert:
Java:
main(x,y);
das sollte eigentlich klappen, aber es kommt der Fehler: "cannot find symbol - variable x"!

Wie kann ich also jetzt die Methode main in Roboterpositionierung aufrufen??
DAS ist das was nicht klappt, nicht die Übergabe der Variablen(sry wegen des falschen Threadnamen)

Vielen Dank im Vorraus

manu
 
Zuletzt bearbeitet:

javimka

Top Contributor
Versuchst du main(x,y) von der Konsole aufzurufen oder aus dem Programm?
Eine main-Methode für ein Programm sieht immer so aus:
[c]public static void main(String[] args)[/c]
So wie bei dir "main(int x, int y)", versteht der Compiler nicht als Einstiegspunkt für das Programm, das ist nur eine weitere Methode, die innerhalb des Programms aufgerufen werden kann.

Wenn du das Programm aus einer IDE oder der Konsole startest und Parameter übergibst, werden diese immer in Strings kovertiert und dem Programm im String[] array args übergeben. Wenn es sich bei x und y um Zahlen handelt, musst du diese zuerst in Integer konvertieren.
Wahrscheinlich funktioniert es, wenn du deiner Klasse einfach folgende Methode hinzufügst:
Java:
public static void main(String[] args) {
  int x = Integer.parseInt(args[0]);
  int y = Integer.parseInt(args[1]);
  main(x,y);
}
Diese Methode ruft deine bereits bestehende Methode main(x,y) auf und übergibt die Eingabeparameter als int-Werte.
 

hdi

Top Contributor
Moment mal hier werden jetzt Dinge verwechselt. Das hat nix mit der main-Methode zu tun die javimka erwähnt hat. Dein Problem ist einfach dass du nicht verstehst was Methoden und Konstruktoren sind, und wie man Variablen da durchreicht.

Bei "Hier soll die METHODE main gestartet werden!" habe ich folgendes ausprobiert [...]
das sollte eigentlich klappen, aber es kommt der Fehler: "cannot find symbol - variable x"!
Nein, das sollte eben nicht klappen und das tut es ja auch nicht. Die main-Methode hat überhaupt nichts mit dem Konstruktor zu tun. Du könntest die main-Methode statt
Java:
main(int x, int y);
auch
Java:
main(int apfelbaum, int superbleifrei);
nennen, und das würde überhaupt keinen Unterschied machen. Ist dir das klar? Wahrscheinlich nicht, sonst würdest du dich nicht über den Fehler wundern.

Und wenn du unbedingt die main-Methode im Konstruktor aufrufen willst, dann musst du diesem Konstruktor diese Variablen halt geben:
Java:
// in der ImagePixelReader:
RoboterPositionierung robpos = new RoboterPositionierung(x,y);

Java:
// Der Konstruktor von RoboterPositionierung:
public RoboterPositionierung(int a, int b){
   main(a,b);
}

Und Ich ich betone nochmal: javimka hat dir nur eine alternative Lösung gegeben, die zwar jetzt funktioniert, aber das hat überhaupt nichts mit dem zu tun was du eigentlich tun willst, und das bringt dir spätestens bei einer zweiten Methode nichts mehr. Ich behaupte mal javimka hat den ganzen Thread nicht mitverfolgt und hat jetzt nur aufgrund deines (zugegeben unüblichen) Methoden-Namen "main" falsche Schlüsse gezogen.
Sein Code hat gar nichts mehr mit deinem Versuch zu tun, und mit Objektorientierter Programmierung gleich 2 mal nicht. Also vergiss das wieder.

Naja ich hab dir ja den Link über Methoden nun schon 3 mal gegeben, wenn du ihn einfach nicht liest haste halt Pech gehabt.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Körper Brechnung - Lokale Variablen in Methoden übergeben Java Basics - Anfänger-Themen 10
P Interface Variablen-Inhalte werden nicht übergeben Java Basics - Anfänger-Themen 3
P Variablen einer Methode in andere Method übergeben Java Basics - Anfänger-Themen 6
L zwei Variablen gleichzeitig übergeben Java Basics - Anfänger-Themen 6
S try-catch - Variablen werden nicht an return übergeben Java Basics - Anfänger-Themen 3
M Variablen übergeben an andere Klasse Java Basics - Anfänger-Themen 9
iB0T Main Methode Variablen übergeben Java Basics - Anfänger-Themen 6
B Variablen an MouseListener übergeben Java Basics - Anfänger-Themen 5
K Probleme mit Threads (Variablen übergeben) Java Basics - Anfänger-Themen 6
W Private Methode variablen übergeben..?! WIE! Java Basics - Anfänger-Themen 30
C Variablen zwischen Methoden übergeben Java Basics - Anfänger-Themen 9
informatikerin Variablen übergeben Java Basics - Anfänger-Themen 10
P In innere Klassen Variablen übergeben Java Basics - Anfänger-Themen 10
G Variablen übergeben Java Basics - Anfänger-Themen 9
H variablen übergeben ohne refernz Java Basics - Anfänger-Themen 10
G variablen in eine andre klasse übergeben (andere Datei) Java Basics - Anfänger-Themen 1
D Variablen übergeben Java Basics - Anfänger-Themen 4
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
T Variablen Java Basics - Anfänger-Themen 1
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
M Aufsummieren von variablen Wertegrößen Java Basics - Anfänger-Themen 17
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
ashi Variablen aufrufen Java Basics - Anfänger-Themen 17
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
C Konstruktoren und Variablen Java Basics - Anfänger-Themen 42
F Auf Variablen eines Konstruktors zugreifen Java Basics - Anfänger-Themen 4
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
Arif Vererbung Methodenvererbung mit finalen Variablen Java Basics - Anfänger-Themen 1
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
S Variablen Variablen in einer Schleife erstellen lassen Java Basics - Anfänger-Themen 11
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
F Variablen Werte einer Klasse überschreiben Java Basics - Anfänger-Themen 4
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
M Java Instanz-Variablen ? Java Basics - Anfänger-Themen 3
B Variablen von Methoden übertragen Java Basics - Anfänger-Themen 2
M Variablen umbenennen Java Basics - Anfänger-Themen 1
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
mars90 Fehler in der Variablen Deklaration Java Basics - Anfänger-Themen 8
E Variablen in formatierter Ausgabe Java Basics - Anfänger-Themen 15
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
M Komisches Verhalten der Variablen Java Basics - Anfänger-Themen 6
H Variablen Multiplikation einer inkrementierten Variablen Java Basics - Anfänger-Themen 5
scratchy1 Variablen vertauschen wenn Bedingung "umgedreht" wird Java Basics - Anfänger-Themen 40
J Variablen mit einer anderen Klasse bekannt machen Java Basics - Anfänger-Themen 7
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
A Übergreifende Variablen Java Basics - Anfänger-Themen 17
A Variablen Verständnisfrage bzgl. Variablen/Referenzen Java Basics - Anfänger-Themen 3
H Variablen Methode zum Abfragen von Variablen aus Subklassen Java Basics - Anfänger-Themen 9
P Variablen Variablen voneinander abhängig Java Basics - Anfänger-Themen 54
F Liste nach einer Variablen sortieren Java Basics - Anfänger-Themen 6
L Variablen in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
M For-Schleife durch zwei versch. Variablen begrenzen Java Basics - Anfänger-Themen 27
J Klassen Variablen in andere Klassen oder Methoden übernehmen Java Basics - Anfänger-Themen 1
P Liste auslesen und in Variablen speichern Java Basics - Anfänger-Themen 7
temi Redundante Variablen Java Basics - Anfänger-Themen 29
Aprendiendo Zweifel mit versteckter Variablen Java Basics - Anfänger-Themen 16
L Variablen einmal nur zu weisen Java Basics - Anfänger-Themen 62
D Statische Variablen/Methoden Java Basics - Anfänger-Themen 3
R Abfrage von Variablen in Unterklassen einer ArrayList Java Basics - Anfänger-Themen 9
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
S Vererbung Variablen klassenübergreifend nutzen Java Basics - Anfänger-Themen 42
R Auf Variablen einer anderen Klasse zugreifen? Java Basics - Anfänger-Themen 1
D Fehlermeldung obwohl Variablen bereits deklariert sind? Java Basics - Anfänger-Themen 14
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
Aruetiise Variablen JFrame und Variablen Java Basics - Anfänger-Themen 3
L Variablen dekleration + reset Java Basics - Anfänger-Themen 16
T Übernahme einer Variablen im ActionListener/ActionEvent Java Basics - Anfänger-Themen 2
D Kapselung final Variablen mit Getter? Java Basics - Anfänger-Themen 2
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
C Variablen in Schleifen außerhalb verwenden Java Basics - Anfänger-Themen 2
S Variablen Flexible Variablen Namen Java Basics - Anfänger-Themen 3
R Erste Schritte 3 Variablen hochzählen lassen Java Basics - Anfänger-Themen 1
RowdyN Variablen Variablen beliebig benennen? Java Basics - Anfänger-Themen 6
S OOP Variablen zwischen mehreren Klassen Java Basics - Anfänger-Themen 11
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
H Variablen einer Schleife zwischenspeichern Java Basics - Anfänger-Themen 2
P Klassen Variablen von einer Klasse zur anderen Java Basics - Anfänger-Themen 5
H Objekt überschreibt Variablen vorheriger Objekte Java Basics - Anfänger-Themen 2
P Variablen in Excel speichern Java Basics - Anfänger-Themen 6
S PHP Aufruf mit mehreren Variablen Java Basics - Anfänger-Themen 2
F Variablen unterschiedlicher Datentypen Java Basics - Anfänger-Themen 6
S ActionListener und Statische Variablen Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
L Vergleich zweier Variablen, mit Abweichung Java Basics - Anfänger-Themen 3
G Variablen Verwendung von Variablen in anderer Klasse Java Basics - Anfänger-Themen 6
P Textfelder in Variablen speichern Java Basics - Anfänger-Themen 13
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
J Vererbung Variablen aus Superklasse übernehmen Java Basics - Anfänger-Themen 2
L Variablen aus TXT Datei auslesen und vergleichen. Java Basics - Anfänger-Themen 5
K Welchen Typ haben Variablen in Default-Methoden und in statischen Methoden in Schnittstellen? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben