Toon posts:

[JAVA]statische methoden een probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Sorry voor de titel deze moest [JAVA]klasse en objecten zijn!!!

Hoe komt het dat de compiler de volgende 3 errors geeft:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
H:\javaprogrammeren\unif>javac ReeleMatrices.java
ReeleMatrices.java:12: cannot resolve symbol
symbol  : class inlezenMatrix
location: class AanmakenMatrix
            AanmakenMatrix matrix1 = new AanmakenMatrix.inlezenMatrix();
                                         ^
ReeleMatrices.java:13: cannot resolve symbol
symbol  : class inlezenMatrix
location: class AanmakenMatrix
            AanmakenMatrix matrix2 = new AanmakenMatrix.inlezenMatrix();
                                         ^
ReeleMatrices.java:18: cannot resolve symbol
symbol  : class somMatrix
location: class AanmakenMatrix
            AanmakenMatrix sommatrix = new AanmakenMatrix.somMatrix(matrix1,
 matrix2);
                                         ^
3 errors

Dus hij herkent de commando's AanmakenMatrix.inlezenMatrix() niet ofzo?
Terwijl deze nogtans goed gedefinieerd zijn volgens mij. Zie code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
//bron ReeleMatrices.java

import java.io.*;
import javagently.*;

public class  ReeleMatrices{
    public static void main(String args[]) throws IOException {
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader in = new BufferedReader(isr);        
        
        System.out.println("We maken de matrices aan om er bewerkingen op uit te voeren");
        AanmakenMatrix matrix1 = new AanmakenMatrix.inlezenMatrix();
        AanmakenMatrix matrix2 = new AanmakenMatrix.inlezenMatrix();
        System.out.println("De 1e matrix:");
        System.out.println(matrix1);
        System.out.println("De 2e matrix:");
        System.out.println(matrix2);
          AanmakenMatrix sommatrix = new AanmakenMatrix.somMatrix(matrix1, matrix2);
        System.out.println("De sommatrix:");
        System.out.println(sommatrix);
        System.out.println("Sommatrix singulier: ");
        System.out.println(sommatrix.geefSingulariteit());      
    }
}
class AanmakenMatrix{
    private int getal1;
    private int getal2;
    private int getal3;
    private int getal4;
    public AanmakenMatrix() {}
    public int geefGetal1(){
        return getal1;
    }
    public int geefGetal2(){
        return getal2;
    }
    public int geefGetal3(){
        return getal3;
    }
    public int geefGetal4(){
        return getal4;
    }
    public AanmakenMatrix(int a, int b, int c, int d){
        getal1 = a;
        getal2 = b;
        getal3 = c;
        getal4 = d;
    }
    public AanmakenMatrix(int e){
        getal1 = e;
        getal2 = 0;
        getal3 = 0;
        getal4 = e;     
    }
    public AanmakenMatrix(String d){
        getal1 = 1;
        getal2 = 0;
        getal3 = 0;
        getal4 = 1;     
    }
    public static AanmakenMatrix somMatrix(AanmakenMatrix m1,AanmakenMatrix m2){
        int getal1 = m1.geefGetal1()+m2.geefGetal1();
        int getal2 = m1.geefGetal2()+m2.geefGetal2();
        int getal3 = m1.geefGetal3()+m2.geefGetal3();
        int getal4 = m1.geefGetal4()+m2.geefGetal4();
        AanmakenMatrix matrix = new AanmakenMatrix(getal1,getal2,getal3,getal4);
        return matrix;
    }
    public boolean geefSingulariteit(){
        int s = getal1*getal4-getal2*getal3;
        boolean sing = (s == 0) ? true:false;
        return sing;
    }
    public String toString(){
        String printsel = getal1+"\t"+getal2+"\n"+getal3+"\t"+getal4;
        return printsel;
    }
    public static AanmakenMatrix inlezenMatrix() throws IOException {
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader in = new BufferedReader(isr);    
        Text.prompt("Geef eerste getal in of typ (d)efault: ");
        System.out.flush();
        String kar1 = Text.readString(in);
        if (kar1=="d"){
            AanmakenMatrix matrix = new AanmakenMatrix((String)kar1);
            return matrix;
        }
        else{
            Text.prompt("Geef 2e getal in of typ (s)top: ");
            System.out.flush();
            String kar2 = Text.readString(in);
            if (kar2=="s"){
                int getal = Integer.parseInt(kar1);
                AanmakenMatrix matrix = new AanmakenMatrix(getal);
                return matrix;
            }
            else{
                Text.prompt("Geef 3e getal in: ");
                System.out.flush();
                int kar3 = Text.readInt(in);
                Text.prompt("Geef 4e getal: ");
                System.out.flush();
                int kar4 = Text.readInt(in);
                AanmakenMatrix matrix = new AanmakenMatrix(Integer.parseInt(kar1),Integer.parseInt(kar2),kar3,kar4);            
                return matrix;
            }
        }
    }
}

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Bij een statische methode hoef je geen object aan te maken. Je kunt dus gewoon zeggen:
code:
1
AanmakenMatrix matrix1 = AanmakenMatrix.inlezenMatrix()

maar je mag ook een statische methode op een instantie aanroepen (dus een echt object). dus matrix.leesMatrixIn() is goed. Daarom zou je ook mogen schrijven.
code:
1
AanmakenMatrix matrix1 = new AanmakenMatrix().inlezenMatrix();

Je moet dus de haakjes niet vergeten om het goed te krijgen :) Maar je kunt het beste de 1e oplossing gebruiken omdat je daar geen onnodig object aanmaakt.

Verwijderd

Topicstarter
Hé ja, dit was idd de oplossing, bedankt!

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Niet erg relevant, maar misschien wel een stuk mooier: de klasse-naam AanmakenMatrix is niet zo lekker gekozen als ik het zo zie. Deze naam doet namelijk vermoeden dat de klasse een operatie vertegenwoordigd. Op zich is dat geen probleem en soms zelfs erg fraai, maar in dit geval is het gewoon een Matrix. Je maakt een instantie van deze klasse aan (= een object) via de constructor of de static methode. Er is dus geen enkele reden waarom de klasse ook "Aanmaken" zou moeten bevatten :) .

Nog een leuk ideetje: die methoden geefGetal1() ... geefGetal4() zijn erg onlogisch. Waarom geef je de index(en) niet mee als argument. Bovendien zou ik lever in het Engels werken. Je krijgt dan bijvoorbeeld: get(int index). Intern kan je dan misschien ook beter werken met een array ipv 4 variabelen. De methode get implemteren is dan makkelijk. Als je het helemaal handig doet, maak je er gelijk een 2D array van (= Matrix ;) ) en maak je de methode get als volgt: get(int row, int column). Ook kan je dan de Matrix generiek maken voor een willekeurig aantal elementen...

Met deze toevoegingen wordt het allemaal een stuk korter, duidelijker en herbruikbaarder :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment