Cannot make a static reference to the non-static field rimWidth

Kirby.exe

Top Contributor
Ich verstehe ehrlich gesagt nicht wo das Problem ist...Warum ist dieser vergleich static?

Hier ist der Code dazu:

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Wheel {

    private int rimWidth;
    private int rimHeigth;
   
    public Wheel(int rimWidth, int rimHeight) {
        this.rimWidth = rimWidth;
        this.rimHeigth = rimHeight;
    }
   
    public void addTire() {
        System.out.println("Welche Art von Reifen möchten sie ? Sommer oder Winterreifen?");
        String mode = readString();
        Tire newTire = findTire(mode);
       
       
    }
   
    private static Tire findTire(String mode) {
        TireDatabase db = new TireDatabase();
        if(mode.equals("sommer")) {
            ArrayList<Tire> summerDB = db.getSummerTires();
            for(Tire it: summerDB) {
                if(it.getTireWidth() == rimWidth && it.getTireRimSize() == rimHeigth) {
                    return it;
                }
            }
        }else if(mode.equals("winter")) {
            ArrayList<Tire> summerDB = db.getWinterTires();
        }else {
            System.out.println("Hast du dich vertippt? Diese Art von Reifen gibt es nicht!");
        }
        return null;
    }
   
    private static String readString(){
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        try {
            return in.readLine();
        }catch(IOException ex) {
            ex.printStackTrace();
        }
        return null;
    }
}

Java:
public class Tire {
    
    private int maxSpeed;
    private int tireWidth;
    private int tireRimSize;
    private int tireProcentage;
    private String tireBrand;
    private String tireName;
    
    public Tire(String tireBrand, String tireName, int maxSpeed, int tireWidth, int tireRimSize, int tireProcentage) {
        this.tireBrand = tireBrand;
        this.tireName = tireName;
        this.maxSpeed = maxSpeed;
        this.tireWidth = tireWidth;
        this.tireRimSize = tireRimSize;
        this.tireProcentage = tireProcentage;
    }
    
    public int getTireWidth() {
        return tireWidth;
    }
    
    public int getTireRimSize() {
        return tireRimSize;
    }
    
    public String toString() {
        return tireBrand + " " + tireName + ", Dimensions: [" + tireWidth + "/" + tireProcentage + "R" + tireRimSize + "]  (Max Speed: " + maxSpeed + " KM/H)";
    }
    
}
 
Die Methode findTire ist static und du versuchst, darin auf eine Variable rimWidth zuzugreifen, die im aktuellen Scope zu der Instanzvariable `private int rimWidth` auflösen würde. Das geht natürlich nicht.
 
Jetzt warst Du zu schnell. Worum geht es überhaupt?
Ich hatte mich gefragt wie ich die findTire Methode, welche Static war als non static benutzen kann...jedoch geht sie auch als non static xD Jedoch frage ich mich, wieso kann in sie in der Klasse aufrufen, obwohl sie non static ist xD

So sieht die Klasse jetzt aus:

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Wheel {

    private int rimWidth;
    private int rimHeigth;
    private Tire tire;
    
    public Wheel(int rimWidth, int rimHeight) {
        this.rimWidth = rimWidth;
        this.rimHeigth = rimHeight;
        tire = null;
    }
    
    public void addTire() {
        System.out.println("Welche Art von Reifen möchten sie ? Sommer oder Winterreifen?");
        String mode = readString();
        tire = findTire(mode);
        if(tire != null) {
            System.out.println("Tire has been changed successful!");
        }else {
            System.out.println("There is no Tire for these Dimensions!");
        }
        System.out.println(tire.toString());
    }
    
    private Tire findTire(String mode) {
        TireDatabase db = new TireDatabase();
        if(mode.equals("sommer")) {
            ArrayList<Tire> summerDB = db.getSummerTires();
            for(Tire it: summerDB) {
                System.out.println("Tire Widht: " + it.getTireWidth() + " | Rim Width: " + rimWidth);
                System.out.println("Tire Heigth: " + it.getTireRimSize() + " | Rim Heigth: " + rimHeigth);
                if(it.getTireWidth() == rimWidth && it.getTireRimSize() == rimHeigth) {
                    return it;
                }
            }
        }else if(mode.equals("winter")) {
            ArrayList<Tire> winterDB = db.getWinterTires();
            for(Tire it: winterDB) {
                if(it.getTireWidth() == rimWidth && it.getTireRimSize() == rimHeigth) {
                    return it;
                }
            }
        }else {
            System.out.println("Hast du dich vertippt? Diese Art von Reifen gibt es nicht!");
        }
        return null;
    }
    
    private static String readString(){
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        try {
            return in.readLine();
        }catch(IOException ex) {
            ex.printStackTrace();
        }
        return null;
    }
}
 
Jedoch frage ich mich, wieso kann in sie in der Klasse aufrufen, obwohl sie non static ist xD
Warum denn nicht?

Mit static werden Klassenvariablen und -methoden gekennzeichnet, also solche Attribute, die sich auf die Klasse als Ganzes und nicht auf ein einzelnes Objekt beziehen.

Daher kannst Du von einer Klassenmethode aus auch keine Objektmethoden aufrufen oder auf Instanzvariablen zugreifen - mangels Objekt. Umgekehrt funktioniert das dagegen natürlich schon.

Ich hatte mich gefragt wie ich die findTire Methode,
Sorry, das meinte ich nicht. Ich meinte, worum es insgesamt geht. Was willst Du überhaupt modellieren?
 
Warum denn nicht?

Mit static werden Klassenvariablen und -methoden gekennzeichnet, also solche Attribute, die sich auf die Klasse als Ganzes und nicht auf ein einzelnes Objekt beziehen.

Daher kannst Du von einer Klassenmethode aus auch keine Objektmethoden aufrufen oder auf Instanzvariablen zugreifen - mangels Objekt. Umgekehrt funktioniert das dagegen natürlich schon.


Sorry, das meinte ich nicht. Ich meinte, worum es insgesamt geht. Was willst Du überhaupt modellieren?
Achse, also ich versuche gerade ein Auto zu modellieren 🙂
 
Aha... gut, dann solltest Du das UI-Zeug gleich mal aus der Klasse werfen. Und findTire (und was damit zusammenhängt) hat dort auch nichts verloren.
 

Zurück
Oben