java Matrix als klasse (array)?

3 Antworten

Das was du machst: Du erstellst eine Klasse mit dem Namen Matrix. Im Konstruktor der Klasse Matrix erstellst du eine zweidimensionale Array als lokale Variable, die nicht weiter verwendet wird.

Anschließend Rufst du den Konstruktor deiner Matrix Klasse in der Main Methode auf. Und das ist bereits der Denkfehler: Dadurch dass sich die lokale Variable im Konstruktor befindet, wird nicht die gleich die ganze Klasse zu einer zweidimensionalen Array.

Wenn deine Klasse eine zweidimensionale Array 'kreieren' soll, bist du garnicht so weit weg von der Lösung.

Deklariere eine zweidimensionale Array als Instanz-Variable.

Im Konstruktor weist du dieser Instanz-Variable dann deine neue Array zu (mit Anzahl Zeilen und Spalten).

Anschließend nimmst du noch einen Getter der dir die zweidimensionale Array zurück liefert.

Instanz-Variable? Könntest du das bitte etwas erläutern.

Und was ist ein Getter?

0
@leonardomessi

Das Schöne an grundlegenden Grundlagen ist, dass einem da Millionen Foreneinträge, Tutorials, Bücher etc weiter helfen. Sowas sollte man sich erst mal aneignen. Zumindest erst mal lesen und dann die Fragen stellen.

0
@leonardomessi

Eine Instanz-Variable ist eine nicht-statische Variable innerhalb einer Klasse, die eine Gültigkeit innerhalb einer Instanz hat.

private Matrix[][] matrix;

ein Getter ist eine Methode, welche eine Instanz-Variable zurückliefert.

public Matrix[][] getMatrix() {
    return matrix;
}
0

Erstmal sehe ich einige Fehler. Wenn die Methode "Matrix" einen Wert zurückgeben soll, musst du das deklarieren. Außerdem fehlt dann entsprechend der return und ich vermute, dass du die Methode als "static" angeben musst.

"System.out.println(marray);"

Dort versuchst du eine Methode aufzurufen, ohne die Parameterangabe. Oder aber dir fehlen Anführungsstriche.

"Matrix(){}"

Was versuchst du da?

for (int i=0; i<3; i++){
   
System.out.println(marray);
}

Warum gibts du 3 mal das gleiche aus (nämlich den Namen des Objekts marray)?

überreste vom test gewesen.

0
@leonardomessi

Ja und wo  ist dann der Code, der hier beurteilt werden soll - nämlich die Verwendung der Klasse?

0
@Gegengift

Das ist die Frage. :DDDDD

Mein aktuelles Problem ist, ich will ein 2 dimensionales Array mithilfe einer Klasse kreieren. Und das klappt mit dem gegebenen Code nicht.

Das weitere programmieren in der Main ist dafür unwichtig.

0
@leonardomessi

Alles klar.

Matrix [][] marray = new Matrix[columns][rows];

Du erstellst also ein Matrix Objekt, das ein zweidimensionales Array enthält, in dem man wiederum Matrix Objekte speichern kann. Sinn?

Mein aktuelles Problem ist, ich will ein 2 dimensionales Array mithilfe einer Klasse kreieren

Wenn es darum geht ein Array durch eine Klasse zu kapseln, dann initialisierst du im Konstruktor nur ein einfaches int-Array. Dieses int-Array muss ein Feld in der Klasse sein. Dann kannst du noch Methoden definieren, um darauf zuzugreifen.



0
@Gegengift

Ich glaube es kommt so ein bisschen raus, das ich noch nicht ganz vertraut mit der Materie bin.

Alles was ich will, ist ein Array zu konstruieren. Und zwar mit einer Klasse.

Zwei Inputs für die Größe des Arrays. Und daraus soll dann das Programm ein Array erstellen.

Ich weis einfach nur nicht, wie ich das bewerkstelligen kann.

Liegt der Fehler in der main oder in der Klasse?

Was muss ich in der Main eingeben, damit er das macht was ich will?

0
@leonardomessi

Im Konstruktor erstellst du ja korrekterweise das Array. Nur dass es kein Array für Matrix-Objekte sein soll, sondern ein Array für einfache int-Werte.

Du erstellst also ein int-Array. Und speichern tust du das in einer Variablen der Klasse (die musst du noch anlegen)

0

"nämlich den Namen des Objekts marray"

Ich bin mir sicher, dass man mit Aufruf einer Methode innerhalb einer Konsolenausgabe nicht den Namen ausgibt (außer vll. man würde das in Anführungsstriche fassen).

Auch wenn ich sagen muss, dass da ein Haufen Fehler im Quellcode ist (da fehlt z.B. die Parameterübergabe oder wenn es "marray" ausgeben soll, dann fehlen die Anführungsstriche).

0
@Etter

Ich bin mir sicher, dass man mit Aufruf einer Methode innerhalb einer Konsolenausgabe nicht den Namen ausgibt

Doch dabei wird halt automatisch die toString-Methode des Objekts aufgerufen. Und die gibt in der Standardimplementierung den vollqualifizierten Namen des Objekts zurück.

0
@Gegengift
public class Test {
public static void main(String[] args) {
System.out.println(Matrix(1,2));
}
public static int Matrix(int test1, int test2) {
return (test1+test2);
}
}

Dann dürfte das ja auch nicht funzen. Ausgabe ist aber 3. Vll. reden wir auch aneinander vorbei.

Wenn man jetzt die Parameterübergabe beim Syso weglässt, dann bekommt man eine Fehlermeldung.

0
@Etter

Du übergibst ja kein Objekt sonder einen int-Wert.

Oben wird aber ein Objekt der Klasse Matrix übergeben (bzw. ein Array-Objekt mit Matrix Objekten). Und wenn man ein Objekt dem Konsolenaufruf übergibt, dann wird die toString-Methode aufgerufen und die gibt den Namen des Objekts zurück.

Z.B. so etwas:

[[LMyClass$Matrix;@74a14482
1

Kennt Beziehung/Assoziation/Bezugsobjekte in Java?

Ich möchte in Java drei Klassen haben. Die erste führt mit der main-Methode nur die zweite aus. Die zweite erstellt ein Objekt der dritten Klasse. Diese soll aber auf die Variablen und Methoden der zweiten Klasse zugreifen (OHNE static).

Erste Klasse:

public class Start {
public static void main(String[] args) {
    new Spiel();
}

}

Zweite Klasse:

public class Spiel {
Spielfeld meinSpielfeld = new Spielfeld();

int spieler = 1;

public int getSpieler() {
    return spieler;
}

public void setSpieler(int spieler) {
    this.spieler = spieler;
}

}

Dritte Klasse:

public class Spielfeld {
private Spiel meinSpiel;

public void test() {
        
    if (meinSpiel.getSpieler() == 1) {
            meinSpiel.setSpieler(2);        
    }
}

}

Alle Klassen auf das nötigste reduziert.

Was ist zu tun, dass bei der dritten Klasse nicht immer nullPointerException kommt?

...zur Frage

Wie sieht die Punktnotation in Java aus oder wie kann ich auf auf andere Klassen zugreifen?

Wie kann ich in der Klasse Telefon die Methoden aus der Klasse Telefonbuch verwenden ? Wenn ich es mit Punktnotation versuche wie z.B.

public void eintrag_hinzufuegen(String name)
{
    Telefonbuch.hinzufuegen(name);
}

, kommt die Fehlermeldung : non static method cannot be referenced from a static context

1)

import java.util.ArrayList;
public class Telefon
{
protected ArrayList <Telefonbuch> telefonbuch;
protected boolean eingeschaltet;
        
        public Telefon()
    {
        // initialise instance variables
        telefonbuch = new ArrayList <Telefonbuch>();
    }
    
    public void anrufen (String name)
    {
    }
    
    public void einschalten()
    {
        eingeschaltet = true;
    }
    
    public void telefonbuch_uebersicht()
    {
        
    }
    
    public void eintrag_hinzufuegen(String name)
    {
    }
    
    public void eintrag_entfernen(String name)
    {
    }
    
    public boolean eintrag_suchen(String name)
    {
    }
}

2)

import java.util.Arrays;

/**
 * Write a description of class Telefonbuch here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Telefonbuch
{
    // instance variables - replace the example below with your own
    private int anzahl_eintrag;
    private int kapazitaet;
    private String[] name_liste;
    protected boolean gefunden;

    /**
     * Constructor for objects of class Telefonbuch
     */
    public Telefonbuch()
    {
        // initialise instance variables
        String [] name_liste = new String[kapazitaet];
        gefunden = false;
    }
    
    public void set_kapazitaet(int x)
    {
        kapazitaet = x;
    }
    
    public void telefonbuch_uebersicht()
    {
        for(int i=0; i < name_liste.length; i++)
        {
        System.out.println(name_liste[i]);
        }
    }
    
    public void hinzufuegen(String name)
    {
        
    }
    
    public void entfernen(String name)
    {
    }
    
    public boolean suchen(String name)
    {
        for(int i=0; i < name_liste.length; i++)
        {
         if(name_liste[i].equals(name))
         {
         gefunden = true;
         }
         else
         {
         //Abbruch
         }
        }
        return gefunden;
    }
}

...zur Frage

Wie lerne ich Programmier-Basics?

Ich würde gerne mal ausprobieren zu programmieren, aber da es so viele verschiedene Sprachen gibt, bin ich etwas überfordert und weiß nicht direkt wo ich anfangen soll, vorallem weil ich zuerst noch die Basics lernen sollte. Wie kann ich das am besten machen? Oder soll ich gleich mit einer Sprache wie z.B Java beginnen? Gibt es dazu gute Youtube Kanäle oder Internet Seiten? Danke schonmal

...zur Frage

Wie funktioniert die Methode read(char[] cbuf) des FileWriters in Java?

Hi, kann mir wer die read() Methode der FileWriter class von java erklären? ich habe Folgenden code: public class FileStream {

public static void main(String[] args) throws IOException{
    
    File file = new File(FileStream.class.getResource("TextFile.txt").getFile());
    FileReader fReader = new FileReader(file);
    char[] c = new char[4];
    int i = 0;
    while((i = fReader.read(c))>= 0){
        System.out.println(c);
        System.out.println(i);
    }       
}

}

wenn sich in meinem TextFile.txt die Zahlen 1 bis 9 befinden und mein c array die länge 4 hat, gibt er mir aus: 1234 5678 9678 woher kommen die letzten drei ziffern 678? wie geht die read() methode in dem textdokument vor und warum hört sie nicht auf wenn sie am ende ist? ist der FileReader die beste Möglichkeit aus einem textFile den text auszulesen?

LG

...zur Frage

Java: Methodenaufruf in einem Object-Array?

Guten Tag,

ich habe ein Spielfeld, welches durch ein Object-Array dargestellt wird. Der Spieler wird durch ein P dargestellt und hat am Anfang die Positionen x und y, welche ich beim Einlesen mit BufferedReader bestimmt habe.

Beispielcode:

abstract class Area {
    public boolean canMove();
}



class A extends Area {
    public boolean canMove() {...}
}



class B extends Area implements InterF {
    public boolean canMove() {...}
    public void trigger() {...}
}



interface InterF {
    public void trigger();
}


class Map {
    Area[][] area;
    ... 
    private void build {
         for (int y = 0; y < area.length; y++){
            for (int x = 0; x < area[y].length; x++) {
                 switch (area[y][x]) {
                    case A: 
                        area[y][x] = new A(); 
                        break;
                    case B: 
                        area[y][x] = new B(); 
                        break;
            }
        }
}

Wenn ich jetzt meinen Spieler in dem Array bewege, wie kann ich wissen, welches Object sich in dem Array-Feld [y][x] befindet (A oder B) und wie kann ich dann die Methode canMove() ausführen und ggf trigger() aus B?

...zur Frage

Java Array einlesen.

Hallo ich fange neu mit Java an und habe folgendes Problem:

Ich möchte einen Array von 15 er Länge einlesen und hab volgendes bereits geschrieben :


import java.util.Scanner;

public class Aufgabe2 {

public static Scanner in;

public static void main (String[] args) { int a[] = new int[15];

/* Einlesen eines 15'er Array's */

for (int i = 0; i < 15; i++){ a[i] = in.nextInt(); }

/* Ausgabe */

for (int i = 0; i < 15; i++){ System.out.printf("%d", a[i]); }

} }


Nun bekomme ich aber immer folgeden Fehlermeldung:

Exception in thread "main" java.lang.NullPointerException

woran liegt das was hab ich falsch gemacht?

Danke schonmal für eure Hilfe.

GLG Ede

...zur Frage

Was möchtest Du wissen?