Avatar billede shik Nybegynder
29. oktober 2005 - 15:36 Der er 27 kommentarer og
1 løsning

SØGES: JAVA/BLUEJ Ekspert

Vi skal lave noget javakode som holder styr på lærere i et register og deres fag. Men vi har et problem...
Er der en der har lyst til at hjælpe, som vil kigge lidt på koden?
Avatar billede schwarz84 Nybegynder
29. oktober 2005 - 16:10 #1
Hvis du lægger koden ind her, skal jeg/andre nok kigge på den.
Du kommer også lige til at forklare hvad problemet er, så vi kan hjælpe med at løse det.
Avatar billede shik Nybegynder
29. oktober 2005 - 16:29 #2
Problemet er at når vi søger på flere fag, så går den ikke længere end den første IF sætning...
Her er koden: Se venligst bort fra at koden er udkommenteret...

import java.util.ArrayList;
import java.util.Iterator;

/**
* A very simple database of people in a university. This class simply stores
* persons and, at request, lists them on standard output.
*
* Written as a first demo program for BlueJ.
*
* @author  Michael Kolling
* @version 1.1, March 2002
*/

public class Register {

    private ArrayList laerere;

    /**
    * Create a new, empty laerere(persons) database.
    */
    public Register()
    {
        laerere = new ArrayList();
    }

    /**
    * Add a laerer to the database.
    */
    public void addLaerer(Laerer l)
    {
        laerere.add(l);
    }

    /**
    * List all the laerere currently in the database on standard out.
    */
    public void listAll ()
    {
        for (Iterator i = laerere.iterator(); i.hasNext();) {
            System.out.println(i.next());
        }
    }
   
    public ArrayList soegNavn(String navn)
    {
        ArrayList soegteNavne = new ArrayList();
       
        for (int i=0; i<laerere.size(); i++)
        {
            Laerer fundneLaerer = (Laerer)laerere.get(i);
            if(fundneLaerer.getNavn() == navn)
            {
                soegteNavne.add(fundneLaerer);
            }           
        }       
        return soegteNavne;     
    }
   
    public ArrayList soegFag(String fag1, String fag2, String fag3, String fag4)
    {
        ArrayList soegteFag = new ArrayList();
       
        for(int i=0; i<laerere.size(); i++)
        {
            Laerer fundneLaerere = (Laerer)laerere.get(i);
            String[] fundneFag = fundneLaerere.getFag();
            for(int j = 0; j < fundneFag.length; j++)
            {
                //if(fag1 != null)
                //{
                    if (fag1.equals(fundneFag[j]))
                    {
                        soegteFag.add(fundneLaerere.getNavn());
                    }   
                //}     
               
                //else if(fag2 != null)
                //{
                    if (fag2.equals(fundneFag[j]))
                    {
                        soegteFag.add(fundneLaerere.getNavn());
                    }
                   
                //}
               
                //else if(fag3 != null)
                //{
                    if (fag3.equals(fundneFag[j]))
                    {
                    soegteFag.add(fundneLaerere.getNavn());
                    }
                   
                //}
               
                //else if(fag4 != null)
                //{
                    if (fag4.equals(fundneFag[j]))
                    {
                    soegteFag.add(fundneLaerere.getNavn());
                    }
                   
                //}
           
            }
        }
        return soegteFag;     
    }
}
Avatar billede kalp Novice
29. oktober 2005 - 16:37 #3
prøv istedet at skrive

!fagx.equalsIgnorecase(fundneFag[j])
Avatar billede kalp Novice
29. oktober 2005 - 16:38 #4
og hvad siger den forresten af fejl.. så er det lettere at finde frem til fejlen (for mig i hvertfald)
Avatar billede shik Nybegynder
29. oktober 2005 - 16:42 #5
Den kommer ikke med nogen fejl, men den kommer bare ikke længere end den første If.
Den søger vist kun på det første fag, selvom du taster flere fag...
Avatar billede kalp Novice
29. oktober 2005 - 16:43 #6
for(int j = 0; j < fundneFag.length; j++)
            {
if(fag1.equalsIgnorecase(fundneFag[j]) || fag2.equalsIgnorecase(fundneFag[j]) || fag3.equalsIgnorecase(fundneFag[j])||fag4.equalsIgnorecase(fundneFag[j]))
soegteFag.add(fundneLaerere.getNavn());
}
Avatar billede kalp Novice
29. oktober 2005 - 16:44 #7
det skal du bare smide ind i metoden istedet for dit eget.. altså istedet for din løkke
Avatar billede kalp Novice
29. oktober 2005 - 16:45 #8
public ArrayList soegFag(String fag1, String fag2, String fag3, String fag4)
    {
        ArrayList soegteFag = new ArrayList();
       
        for(int i=0; i<laerere.size(); i++)
        {
            Laerer fundneLaerere = (Laerer)laerere.get(i);
            String[] fundneFag = fundneLaerere.getFag();
if(fag1.equalsIgnorecase(fundneFag[j]) || fag2.equalsIgnorecase(fundneFag[j]) || fag3.equalsIgnorecase(fundneFag[j])||fag4.equalsIgnorecase(fundneFag[j]))
soegteFag.add(fundneLaerere.getNavn());
        }
        return soegteFag;     
    }
}
Avatar billede shik Nybegynder
29. oktober 2005 - 16:45 #9
Kan man ikke kun bruge || hvis det er en boolean man bruger??
Avatar billede kalp Novice
29. oktober 2005 - 16:48 #10
boolean ? hvorfor ? prøv at copy & paste min sidste kode.. så kan vi justere på den efterfølgende hvis det virker
Avatar billede shik Nybegynder
29. oktober 2005 - 16:49 #11
Nu kommer den med en fejl der hedder:
java.lang.NullPointerException
at Register.SoegFag(Register.java:86)

java.lang.NullPointerException
at Register.SoegFag(Register.java:89)
Avatar billede kalp Novice
29. oktober 2005 - 16:53 #12
Jeg tilpasser lige din kode istedet.. tager lige et par minutter.. kan være der er en hurtigere en imens.. så er et bare ærgeligt for mig:)
Avatar billede kalp Novice
29. oktober 2005 - 16:58 #13
public ArrayList soegFag(String fag1, String fag2, String fag3, String fag4)
    {
        ArrayList soegteFag = new ArrayList();
    String[] fundneFag;
       
        for(int i=0; i<laerere.size(); i++)
        {
            Laerer fundneLaerere = (Laerer)laerere.get(i);
            fundneFag = fundneLaerere.getFag();

            for(int j = 0; j < fundneFag.length; j++)
            {
                //if(fag1 != null)
                //{
                    if (fag1.equalsIgnoreCase(fundneFag[j]))
                    {
                        soegteFag.add(fundneLaerere.getNavn());
                    }   
                //}     
               
                //else if(fag2 != null)
                //{
                    if (fag2.equalsIgnoreCase(fundneFag[j]))
                    {
                        soegteFag.add(fundneLaerere.getNavn());
                    }
                   
                //}
               
                //else if(fag3 != null)
                //{
                    if (fag3.equalsIgnoreCase(fundneFag[j]))
                    {
                    soegteFag.add(fundneLaerere.getNavn());
                    }
                   
                //}
               
                //else if(fag4 != null)
                //{
                    if (fag4.equalsIgnoreCase(fundneFag[j]))
                    {
                    soegteFag.add(fundneLaerere.getNavn());
                    }
                   
                //}
           
            }
        }
        return soegteFag;     
    }
Avatar billede shik Nybegynder
29. oktober 2005 - 16:59 #14
Se bort fra den sidste fejl, det var ikke med din kode...
Men det virker bare ligesom før...
Altså hvis den første lærer kun har dansk & null i resten, lærer2 har Engelsk og Dansk og null i resten.
Så søger jeg både på dansk og engelsk, men så skal lærer 2 komme ud 2 gange, men han kommer kun 1 gang.
Avatar billede kalp Novice
29. oktober 2005 - 17:02 #15
eller muligvis..

public ArrayList soegFag(String fag1, String fag2, String fag3, String fag4)
    {
        ArrayList soegteFag = new ArrayList();
        String[] fundneFag;
       
        for(int i=0; i<laerere.size(); i++)
        {
            Laerer fundneLaerere = (Laerer)laerere.get(i);
            fundneFag = fundneLaerere.getFag();

            for(int j = 0; j < fundneFag.length; j++)
            {
                //if(fag1 != null)
                //{
                    if (fag1.equalsIgnoreCase(fundneFag[j]))
                    {
                        soegteFag.add(new String(fundneLaerere.getNavn()));
                    }   
                //}     
               
                //else if(fag2 != null)
                //{
                    if (fag2.equalsIgnoreCase(fundneFag[j]))
                    {
                        soegteFag.add(new String(fundneLaerere.getNavn()));
                    }
                   
                //}
               
                //else if(fag3 != null)
                //{
                    if (fag3.equalsIgnoreCase(fundneFag[j]))
                    {
                    soegteFag.add(new String(fundneLaerere.getNavn()));
                    }
                   
                //}
               
                //else if(fag4 != null)
                //{
                    if (fag4.equalsIgnoreCase(fundneFag[j]))
                    {
                    soegteFag.add(new String(fundneLaerere.getNavn()));
                    }
                   
                //}
           
            }
        }
        return soegteFag;     
    }
Avatar billede shik Nybegynder
29. oktober 2005 - 17:03 #16
Man skal selvfølgelig kunne søge kun på 1 fag hvis man vil det.
Avatar billede kalp Novice
29. oktober 2005 - 17:05 #17
hvis koden virker så kan vi selvfølgelig rette det til;) så man kun kan det...
Avatar billede shik Nybegynder
29. oktober 2005 - 17:06 #18
Det er jo netop det, men koden virker jo ikke. Jo, du kan compile, men den gør jo ikke det som den skal.
Hvis du læser hvad jeg har skrevet, så søger den kun på det første fag og ikke på flere fag.
Avatar billede kalp Novice
29. oktober 2005 - 17:08 #19
Yep det har jeg forstået.. må jeg spørge om noget?
sikker på de parametre du sender med over er rigtige? der bliver jo sammenlignet med dem.. hvis ikke de matcher fundneFag[j] så vil de ikke blive indsat.

jeg kan høre på dig at fag1 er korrekt for det virker jo
Avatar billede kalp Novice
29. oktober 2005 - 17:08 #20
prøv evt. at udskrive fag2,3 og 4 så du kan se hvad de indeholder.
Avatar billede shik Nybegynder
29. oktober 2005 - 17:10 #21
Det er som om at den kun gennemløber den første if-sætning og så tilføjer den navnet til soegteFag, men hvis den samme person har de to fag man søger på registrerer den kun det første fag man har skrevet.
Avatar billede kalp Novice
29. oktober 2005 - 17:13 #22
udskriv fag2, 3 og 4 .. så vi kan udelukke det som problemet:)

du har fjernet else if og udelukkende lavet if sætninger.. så alle if sætninger bliver altså kørt!!
Avatar billede kalp Novice
29. oktober 2005 - 17:16 #23
og ellers vis mig hvor du kalder metoden så kan jeg selv vurdere hvad du sender med af parametre til metoden.

soegFag(String fag1, String fag2, String fag3, String fag4)
Avatar billede shik Nybegynder
29. oktober 2005 - 17:18 #24
Jeg er sikker på at det er de samme parametre, for jeg skriver dem selv ind i register-klassen. Hvis jeg fjerner alle de linier hvor at fagx skal være forskellig fra null og søger på alle fagne så får jeg alt information, men så må den ikke være null.
Avatar billede kalp Novice
29. oktober 2005 - 17:22 #25
adasdasdasd@hotmail.com

send filerne jeg får brug for.. så kigger jeg på det.
Avatar billede shik Nybegynder
29. oktober 2005 - 17:23 #26
import java.util.ArrayList;
import java.util.Iterator;

/**
* A very simple database of people in a university. This class simply stores
* persons and, at request, lists them on standard output.
*
* Written as a first demo program for BlueJ.
*
* @author  Michael Kolling
* @version 1.1, March 2002
*/

public class Register2 {

    private ArrayList laerere;

    /**
    * Create a new, empty laerere(persons) database.
    */
    public Register2()
    {
        laerere = new ArrayList();
    }

    /**
    * Add a laerer to the database.
    */
    public void addLaerer(Laerer l)
    {
        laerere.add(l);
    }

    /**
    * List all the laerere currently in the database on standard out.
    */
    public void listAll ()
    {
        for (Iterator i = laerere.iterator(); i.hasNext();) {
            System.out.println(i.next());
        }
    }
   
    public ArrayList soegNavn(String navn)
    {
        ArrayList soegteNavne = new ArrayList();
       
        for (int i=0; i<laerere.size(); i++)
        {
            Laerer fundneLaerer = (Laerer)laerere.get(i);
            if(fundneLaerer.getNavn() == navn)
            {
                soegteNavne.add(fundneLaerer);
            }           
        }       
        return soegteNavne;     
    }
   
    public ArrayList soegFag(String fag1, String fag2, String fag3, String fag4)
    {
        ArrayList soegteFag = new ArrayList();
    String[] fundneFag;
       
        for(int i=0; i<laerere.size(); i++)
        {
            Laerer fundneLaerere = (Laerer)laerere.get(i);
            fundneFag = fundneLaerere.getFag();

            for(int j = 0; j < fundneFag.length; j++)
            {
                if(fag1 != null)
                {
                    if (fag1.equalsIgnoreCase(fundneFag[j]))
                    {
                        soegteFag.add(fundneLaerere.getNavn());
                    }   
                }     
               
                else if(fag2 != null)
                {
                    if (fag2.equalsIgnoreCase(fundneFag[j]))
                    {
                        soegteFag.add(fundneLaerere.getNavn());
                    }
                   
                }
               
                else if(fag3 != null)
                {
                    if (fag3.equalsIgnoreCase(fundneFag[j]))
                    {
                    soegteFag.add(fundneLaerere.getNavn());
                    }
                   
                }
               
                else if(fag4 != null)
                {
                    if (fag4.equalsIgnoreCase(fundneFag[j]))
                    {
                    soegteFag.add(fundneLaerere.getNavn());
                    }
                   
                }
           
            }
        }
        return soegteFag;     
    }
}


import java.util.ArrayList;

/**
* A very simple database of people in a university. This class simply stores
* persons and, at request, lists them on standard output.
*
* Written as a first demo program for BlueJ.
*
* @author  Michael Kolling
* @version 1.1, March 2002
*/



public class Laerer
    {
    private String navn;
    private String adresse;
    private int mobil;
    private int fastnet;
    private String email;
    private String fag[];
   
    /**
    * Create a laerer with given name and age.
    */
    public Laerer(String navn, String adresse, int mobil, int fastnet, String email, String fag1, String fag2, String fag3, String fag4)
    {
        this.navn = navn;
        this.adresse = adresse;
        this.mobil = mobil;
        this.fastnet = fastnet;
        this.email = email;
       
        this.fag = new String[4];
        this.fag[0] = fag1;
        this.fag[1] = fag2;
        this.fag[2] = fag3;
        this.fag[3] = fag4;
           
    }
   
    /**
    * Returnerer navn på den pågældende Laerer.
    */
    public String getNavn()
    {
        return navn;
    }
    /**
    * Returnerer adresse på den pågældende Laerer.
    */
    public String getAdresse()
    {
        return adresse;
    }
    /**
    * Returnerer mobil på den pågældende Laerer.
    */
    public int getMobil()
    {
        return mobil;
    }
    /**
    * Returnerer fastnet på den pågældende Laerer.
    */
    public int getFastnet()
    {
        return fastnet;
    }
    /**
    * Returnerer email på den pågældende Laerer.
    */
    public String getEmail()
    {
        return email;
    }
    /**
    * Returnerer fag på den pågældende Laerer.
    */
    public String[] getFag()
    {
        return fag;
    } 
   
    /**
    * Giver et nyt navn til den pågældende Laerer.
    */
    public void setNavn(String newNavn)
    {
        navn = newNavn;
    }
    /**
    * Giver en ny adresse til den pågældende Laerer.
    */
    public void setAdresse(String newAdresse)
    {
        adresse = newAdresse;
    }
    /**
    * Giver et nyt mobilnummer til den pågældende Laerer.
    */
    public void setMobil(int newMobil)
    {
        mobil = newMobil;
    }   
    /**
    * Giver et nyt fastnetnummer til den pågældende Laerer.
    */
    public void setFastnet(int newFastnet)
    {
        fastnet = newFastnet;
    }   
    /**
    * Giver en ny email til den pågældende Laerer.
    */
    public void setEmail(String newEmail)
    {
        email = newEmail;
    }
  /**
    * Giver et nyt fag1 til den pågældende Laerer.
    */
    public void setFag1(String fag1)
    {
        fag[0] = fag1;
    }
    /**
    * Giver et nyt fag2 til den pågældende Laerer.
    */
    public void setFag2(String fag2)
    {
        fag[1] = fag2;
    }
    /**
    * Giver et nyt fag3 til den pågældende Laerer.
    */
    public void setFag3(String fag3)
    {
        fag[2] = fag3;
    }
    /**
    * Giver et nyt fag4 til den pågældende Laerer.
    */
    public void setFag4(String fag4)
    {
        fag[3] = fag4;
    }

   
   
    // Skal slettes
    /**
    * Return a string representation of this object.
    */
    public String toString()    // redefined from "Object"
    {
        return "Navn: " + navn + "\n" +
              "Adresse: " + adresse + "\n" +
              "Mobil: " + mobil + "\n" +
              "Fastnet: " + fastnet+ "\n" +
              "E-mail: " + email + "\n" +
              "Fag: " + fag[0] + "/" + fag[1] + "/" + fag[2] + "/" + fag[3] + "\n";
    }
}
Avatar billede kalp Novice
29. oktober 2005 - 17:24 #27
men burde du bare kunne ændre dine

(fagx != null)

til

(!fagx.equalsIgnoreCase(""))
Avatar billede kalp Novice
29. oktober 2005 - 18:17 #28
løsningen blev

package mypackage;
import java.util.ArrayList;
import java.util.Iterator;

/**
* A very simple database of people in a university. This class simply stores
* persons and, at request, lists them on standard output.
*
* Written as a first demo program for BlueJ.
*
* @author  Michael Kolling
* @version 1.1, March 2002
*/

public class Registrer {

    private ArrayList laerere;

    /**
    * Create a new, empty laerere(persons) database.
    */
    public Registrer()
    {
        laerere = new ArrayList();
    }

    /**
    * Add a laerer to the database.
    */
    public void addLaerer(Laerer l)
    {
        laerere.add(l);
    }

    /**
    * List all the laerere currently in the database on standard out.
    */
    public void listAll ()
    {
        for (Iterator i = laerere.iterator(); i.hasNext();) {
            System.out.println(i.next());
        }
    }
   
    public ArrayList soegNavn(String navn)
    {
        ArrayList soegteNavne = new ArrayList();
       
        for (int i=0; i<laerere.size(); i++)
        {
            Laerer fundneLaerer = (Laerer)laerere.get(i);
            if(fundneLaerer.getNavn() == navn)
            {
                soegteNavne.add(fundneLaerer);
            }           
        }       
        return soegteNavne;     
    }
   
    public ArrayList soegFag(String fag1, String fag2, String fag3, String fag4)
    {
        ArrayList soegteFag = new ArrayList();
       
        for(int i=0; i<laerere.size(); i++)
        {
            Laerer fundneLaerere = (Laerer)laerere.get(i);
            String[] fundneFag = fundneLaerere.getFag();
            for(int j = 0; j < fundneFag.length; j++)
            {
                    if (fag1.equals(fundneFag[j]))
                    {
                        soegteFag.add(fundneLaerere.getNavn());
                    }   
               
                    if (fag2.equals(fundneFag[j]))
                    {
                        soegteFag.add(fundneLaerere.getNavn());
                    }
                   
                    if (fag3.equals(fundneFag[j]))
                    {
                    soegteFag.add(fundneLaerere.getNavn());
                    }
                   
                    if (fag4.equals(fundneFag[j]))
                    {
                    soegteFag.add(fundneLaerere.getNavn());
                    }           
            }
        }
        return soegteFag;     
    }
   
    public ArrayList soegFag(String fag1, String fag2, String fag3)
    {
        ArrayList soegteFag = new ArrayList();
       
        for(int i=0; i<laerere.size(); i++)
        {
            Laerer fundneLaerere = (Laerer)laerere.get(i);
            String[] fundneFag = fundneLaerere.getFag();
            for(int j = 0; j < fundneFag.length; j++)
            {
                    if (fag1.equals(fundneFag[j]))
                    {
                        soegteFag.add(fundneLaerere.getNavn());
                    }   
               
                    if (fag2.equals(fundneFag[j]))
                    {
                        soegteFag.add(fundneLaerere.getNavn());
                    }
                   
                    if (fag3.equals(fundneFag[j]))
                    {
                    soegteFag.add(fundneLaerere.getNavn());
                    }
                   
               
            }
        }
        return soegteFag;     
    }
   
    public ArrayList soegFag(String fag1, String fag2)
    {
        ArrayList soegteFag = new ArrayList();
       
        for(int i=0; i<laerere.size(); i++)
        {
            Laerer fundneLaerere = (Laerer)laerere.get(i);
            String[] fundneFag = fundneLaerere.getFag();
            for(int j = 0; j < fundneFag.length; j++)
            {
                    if (fag1.equals(fundneFag[j]))
                    {
                        soegteFag.add(fundneLaerere.getNavn());
                    }   
               
                    if (fag2.equals(fundneFag[j]))
                    {
                        soegteFag.add(fundneLaerere.getNavn());
                    }
                             
            }
        }
        return soegteFag;     
    }
   
    public ArrayList soegFag(String fag1)
    {
        ArrayList soegteFag = new ArrayList();
       
        for(int i=0; i<laerere.size(); i++)
        {
            Laerer fundneLaerere = (Laerer)laerere.get(i);
            String[] fundneFag = fundneLaerere.getFag();
            for(int j = 0; j < fundneFag.length; j++)
            {
                    if (fag1.equals(fundneFag[j]))
                    {
                        soegteFag.add(fundneLaerere.getNavn());
                    }   
                     
            }
        }
        return soegteFag;     
    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester