Classes worden geskipt

Status
Niet open voor verdere reacties.

emiel333

Gebruiker
Lid geworden
8 sep 2008
Berichten
14
HELP!

Ik heb een java programmatje geschreven met drie classes, waarvan er twee zouden moeten runnen in de while loop van de eerste class. :shocked:

In het kort ziet het er zo uit:

Code:
class mainclass {
        public static void main(String args[]) 
                throws InterruptedException,AWTException,IOException { 

// eerste deel bewerkingen class mainclass

while Run{   //begin while loop

class datacollection {
        public void main (String args[]) 
                throws InterruptedException, AWTException, IOException{

//bewerkingen van class datacollection

}  //einde class datacollection

class action {
        public void main (String args[]) 
                throws InterruptedException, AWTException, IOException{

//bewerkingen van class action

} //einde class action


//rest bewerkingen class mainclass

}//einde while loop

}//einde class mainclass

Ik werk met NetBeans 6.1 en deze editor geeft geen fouten aan in mijn file.

Nu is het probleem dat de classes 'datacollection' en 'action' gewoon worder "overgeslagen" als ik de complete file run.

Heeft iemand hier een oplossing voor?

Alvast bedankt! :thumb:
 
Laatst bewerkt door een moderator:
Begin eerst eens met alle klasse in 3 bestanden te zetten..
Zoals het er nu staat definieer je alleen je klassen. Maar gebruik je ze niet!. Dit zie je vanzelf als je alles opsplits.

Ook als je een programma runt wordt altijd maar 1 main gebruikt.. in dit geval van mainclass

succes,
 
Bedankt voor je reactie Skinflowers!

Ik heb al eerder geprobeerd ze in verschillende bestanden te zetten(daar was ik mee begonnen), maar omdat ik niet wist hoe ik de twee classes vanuit de mainclass kan starten heb ik ze in 1 bestand gezet...
Nu ben ik er al achter dat het werken met inner en nested classes nogal ingewikkeld is, dus lijkt het mij ook verstandig met drie verschillende bestanden te werken.

Zo kom ik weer terug bij mijn initiele probleem: Ik weet niet hoe ik die andere twee classes kan starten op een specifiek punt in mijn mainclass.
Dus als je mij zou kunnen vertellen hoe ik die classes in een ander bestand kan aansturen vanuit de mainclass is mijn probleem ook opgelost... ;)
 
Zie onderstaand voobeeld.

Dit zijn drie klassen main, datacollection en action.
Van de datacollection maak je een "instance" aan met de regel "DataCollection data1 = new DataCollection();".
Nu kan je de klasse functie collect aanroepen met data1.collect(...)

Een andere mogelijkheid is een static functie (zoals in de action klasse. Deze functie kan je ook aanroepen zonder instance. zo'n functie roep je aan met de regel Action.summary(...)
Hier gebruik je de klasse naam + functie

succes,

ps. Klassenamen beginnen altijd met hoofdletter. Functies en variabelen met kleine letter

Code:
package mainclass;

import java.util.ArrayList;
import java.util.List;

public class DataCollection {
    //variable data bevat alle strings die we willen opslaan.
    List<String> list;
    
    public DataCollection() {
        list = new ArrayList<String>();
    }
    
    public void collect(String data) {
        list.add(data);
    }
    
    public int size() {
        return list.size();
    }
}

Code:
package mainclass;

public class Action {
    private Action() {
        //de constructor is private zodat je deze niet klasse niet kan instantieren.
    }
    
    //static function kan je aanroepen ook als er geen instance van is. 
    public static String summary(DataCollection dataCollection) {
       return dataCollection.size() == 0 ? "Nog geen data" : "data aanwezig"; 
    }
}

Code:
package mainclass;

public class Main {

    public static void main(String[] args) {
        DataCollection data1 = new DataCollection();
        DataCollection data2 = new DataCollection();
        
        System.out.println("Data1:" + Action.summary(data1));
        System.out.println("Data2:" + Action.summary(data2));
        
        data1.collect("data toevoegen");
        
        System.out.println("Data1:" + Action.summary(data1));
        System.out.println("Data2:" + Action.summary(data2));
        
        data2.collect("data toevoegen");
        
        System.out.println("Data1:" + Action.summary(data1));
        System.out.println("Data2:" + Action.summary(data2));
        
    }

}
 
Hallo Skinflowers,

Ten eerste bedankt voor de zeer duidelijke post! :thumb:

Ik heb e.e.a. in mijn code aangepast, maar hij blijft heel lang compilen, dus ik denk dat er toch nog wat mis is. Misschien dat ik iets heel doms heb gedaan hoor... Zoja, excuus daarvoor dan. Ik ben helaas geen ervaren programmeur... :(
Zou je toch nog de moeite willen nemen om me op mijn fout(en) te wijzen?

Mijn drie classes zien er al volgt uit nu:

Mainclass:
Code:
class Main {
        public static void main(String args[]) 
                throws InterruptedException, AWTException, ClassNotFoundException, IOException { 

//bla bla bla 

while Go{   
//Hier begint een while loop
//blablabla

Datacollection data1 = new Datacollection();                        
Takeaction data2 = new Takeaction();                        
                        
data1.collect("Datacollection toevoegen");
data2.collect("Takeaction toevoegen");                     

//blablabla
} //Einde while loop

Datacollection:
Code:
public class Datacollection{     
        
        List<String> list;    
        
        public Datacollection()
                throws InterruptedException, AWTException, IOException {
    
            list = new ArrayList<String>();

//blablabla

}
        public void collect(String data1){
            
            list.add(data1);
        
        }    
        public int size(){
           
            return list.size();
        }
}

Takeaction:
Code:
public class Takeaction {
    
        List<String> list;
        
        public Takeaction () 
                throws InterruptedException, AWTException, IOException {
            
            list = new ArrayList<String>();

//blablabla

   }
        public void collect(String data2){
            
            list.add(data2);
        
        }    
        public int size(){
           
            return list.size();
        }
}


Alvast heel erg bedankt voor de moeite!!!

Groet, Emiel.
 
Laatst bewerkt:
Hoi,

Je schrijft: "maar hij blijft heel lang compilen". Bedoel je echt compilen of bedoel je dat hij lang runt.. (Compile is de eerste stap en zal met z'n kort programma hooguit 10 sec. duren.)

Ik ga er van uit dat je programma in een eindeloze loop zit. Waardoor het lijkt of er niets gebeurd en ik verdenk je While loop hiervan.
Deze heeft de vorm van:
Code:
While (go) {
  ...
}

Deze loop zal alleen maar stoppen als "go" ooit de waarde false krijgt. Is dat zo ??

Verder staat deze regel in jou loop:

Code:
Datacollection data1 = new Datacollection();

Dit houd in dat elke keer een DataCollection object wordt aangemaakt en dus dat de oude data verloren gaat. Dit is vast niet wat je wilt. Deze regel moet dan ook voor de While komen...

succes...
 
Wederom bedankt voor je reactie!

Toen ik het programma probeerde te runnen duurde dat extreem lang. Daarom heb ik eerst geprobeerd alleen te compilen, maar dit duurt dus ook heel erg lang.

Die while loop krijgt een einde als hij een bepaald aantal keer doorlopen is. De waarde van Go wordt dan inderdaad false.

Ik wil inderdaad wel steeds een nieuwe datacollection doen, dus dat

Code:
Datacollection data1 = new Datacollection();

in de while loop zit klopt.

Hopelijk heb je een idee over hoe het kan dat hij niet binnen een tiental seconden kan compilen...? Kloppen de codes die ik in mijn vorige posts heb gezet wel? En heb ik de originele code van elke class (//blablabla in mijn vorige post) goed ingevoerd?

Groet
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan