Klassen Warum kann meine Klasse nicht auf Methoden der anderen Klasse zugreifen?

Noccctis

Mitglied
Java:
public class Eintrag{

    private String fachwort;
    private String erlaeuterung;
    private double kenntnis;

    Eintrag(String a, String b) {
        fachwort=a;
        erlaeuterung=b;
        kenntnis=0;
    }

    public void setFachwort(String a) {
        fachwort=a;
    }

    public void setErlaeuterung(String a) {
        erlaeuterung=a;
    }

    public void setKenntnis(double a) {
        kenntnis=a;
    }

    public String getFachwort() {
        return fachwort;
    }

    public String getErlaeuterung() {
        return erlaeuterung;
    }

    public double getKenntnis() {
        return kenntnis;
    }

    @Override public String toString() {
        String str = fachwort + " "+erlaeuterung+" "+ kenntnis;
        return str;
    }
}
Java:
import java.util.Scanner;

public class Fachlexikon {

    private Scanner sc;

    public static void main (String[] args){
        Scanner sc = new Scanner(System.in);

// Für Ihre eigene Lösung bitte die folgenden zwei Zeilen austauschen:
        //      FachlexikonHidden musik = new FachlexikonHidden(sc);
        Fachlexikon musik = new Fachlexikon(sc);

        musik.eintragen("p","piano, leise");
        musik.eintragen("f","forte, laut");
        musik.eintragen("ff","fortissimo, sehr laut");

        for (int i=1; i< 10; i++) musik.uebung();

        System.out.println("Inhalt des Fachlexikons:\n" + musik);
    }

    Object[] array;

    public Fachlexikon(Scanner sc){
        array = new Object [1000];
        sc=sc;
    }

    public void eintragen(String fachwort, String erlaeuterung){
        Object obj = new Eintrag(fachwort, erlaeuterung);

        for(int i=0;i<1000;i++) {
            if (array[i]==null) {
                array[i]=obj;
                break;
            }
        }


    }

    @Override public String toString(){
        String a = "";
        int i=0;
        while(array[i]!=null) {
            a = a + array[i].toString();
            i++;
        }
            return a;
    }

    public void uebung(){

        int min=array[0].getKenntnis();

        for (int i=0;i<1000;i++) {
            if(array[i].getKenntnis()<min) {
                min=array[i].getKenntnis;
            }
        }

        for (int i=0;i<1000;i++) {
            if(array[i].getKenntnis()==min) {
                System.out.println(array[i].getFachwort());
            }
        }

        System.out.println();
        System.out.println("Kennen Sie den Eintrag?");

        String a= sc.nextLine();

        if (a=="") {
            for (int i=0;i<1000;i++) {
                if(array[i].getKenntnis()==min) {
                    System.out.println(array[i].getErlaeuterung());
                }
            }
        }

        String b = sc.nextLine();

        for (int i=0;i<1000;i++) {
            if(array[i].getKenntnis()==min) {
                if(b=="") {
                    array[i].setKenntnis=array[i].getKenntnis+1;
                }
                else {array[i].setKenntnis=array[i].getKenntnis/2;}
            }
        }

    }



}
 
Also mehrere Dinge:

a) Das kann so nicht gehen:
Java:
    public Fachlexikon(Scanner sc){
        array = new Object [1000];
        sc=sc; // Dem Parameter sc wird der Parameter sc zugewiesen?
    }
Es dürfte klar sein, was gemeint ist, aber dazu fehlt etwas. Der Parameter versteckt die Instanzvariable - wie kann man dann noch auf die Instanzvariable zugreifen?

b) Vergleich von String:
String sind Referenz-Typen (Klasse String) - wie werden Instanzen vergleichen? So nicht:
Java:
if(b=="")

c) Methoden aufrufen:
Ein Setter ist auch nur eine normale Methode, Wie wird eine Methode aufgerufen? So definitiv nicht:
Java:
array[i].setKenntnis=array[i].getKenntnis+1
setKenntnis ist eine Methode und eine Methode wird aufgerufen und ihr wird nichts zugewiesen.
Ebenso ist getKenntnis eine Methode. Diese muss also auch aufgerufen werden. Wie das funktioniert siehst Du paar Zeilen drüber ...

Reichen diese Hinweise? Zu allen Punkten habe ich paar Worte genannt - über Google und Co sollte man da zur Lösung kommen können ....
 
Moin,

ich sehe keine konkrete Frage 🙄
Wo sollte WER aus WAS zugreifen ??

Ein bisschen solltest Du schon erklären, was Dein (völlig unkommentierter) Code machen soll bzw. nicht macht!

Gruß Klaus
 
Also mehrere Dinge:

a) Das kann so nicht gehen:
Java:
    public Fachlexikon(Scanner sc){
        array = new Object [1000];
        sc=sc; // Dem Parameter sc wird der Parameter sc zugewiesen?
    }
Es dürfte klar sein, was gemeint ist, aber dazu fehlt etwas. Der Parameter versteckt die Instanzvariable - wie kann man dann noch auf die Instanzvariable zugreifen?

b) Vergleich von String:
String sind Referenz-Typen (Klasse String) - wie werden Instanzen vergleichen? So nicht:
Java:
if(b=="")

c) Methoden aufrufen:
Ein Setter ist auch nur eine normale Methode, Wie wird eine Methode aufgerufen? So definitiv nicht:
Java:
array[i].setKenntnis=array[i].getKenntnis+1
setKenntnis ist eine Methode und eine Methode wird aufgerufen und ihr wird nichts zugewiesen.
Ebenso ist getKenntnis eine Methode. Diese muss also auch aufgerufen werden. Wie das funktioniert siehst Du paar Zeilen drüber ...

Reichen diese Hinweise? Zu allen Punkten habe ich paar Worte genannt - über Google und Co sollte man da zur Lösung kommen können ....


Okey vielen Dank. Aber auch wenn ich die Klammern hinter das getKenntnis einfüge, die Methode wird trotzdem nicht gefunden. Ich habe das Gefühl, dass die Klassen einfach nicht von der Existenz von der jeweils andern wissen..
 
Moin,

ich sehe keine konkrete Frage 🙄
Wo sollte WER aus WAS zugreifen ??

Ein bisschen solltest Du schon erklären, was Dein (völlig unkommentierter) Code machen soll bzw. nicht macht!

Gruß Klaus

Also wenn die Klasse Fachlexikon in z.B. der Methode uebung die Methode .getKenntnis() aufruft, welche in der Klasse Eintrag ist dann wird mir die Fehlermeldung angezeigt, dass die Methode gar nicht existiert. Obwohl beide auch im gleichen Ordner sind.
 
Also wenn die Klasse Fachlexikon in z.B. der Methode uebung die Methode .getKenntnis() aufruft, welche in der Klasse Eintrag ist dann wird mir die Fehlermeldung angezeigt, dass die Methode gar nicht existiert. Obwohl beide auch im gleichen Ordner sind.

Ja, das ist auch klar. Du definierst ja auch ein Array von Object:
Java:
Object[] array;

Damit hast Du auch nur die Möglichkeiten von Object bei den Elementen des Arrays.

Wenn Du in dem Array nur Instanzen der Klasse Eintrag speichern willst, dann mach es auch zu einem Array von Eintrag Elementen!
 
Ja, das ist auch klar. Du definierst ja auch ein Array von Object:
Java:
Object[] array;

Damit hast Du auch nur die Möglichkeiten von Object bei den Elementen des Arrays.

Wenn Du in dem Array nur Instanzen der Klasse Eintrag speichern willst, dann mach es auch zu einem Array von Eintrag Elementen!

Das war es! Super danke! Schnelle und hilfreiche Antworten <3
 

Zurück
Oben