Avatar billede ozman Nybegynder
11. december 2003 - 22:17 Der er 14 kommentarer og
1 løsning

Probs med array

Jeg kan ikke få dette til at køre. Hvad er der galt?

import java.util.*;
import java.io.*;

public class Ord
{
  public static void main (String[] args) throws Exception
  {
      String linie, file = "mineord.dat";
      String [] navneord = new String [20];

      FileReader fr = new FileReader (file);
      BufferedReader inFile = new BufferedReader (fr);

        linie = inFile.readLine();
        int i=0;
        while (inFile.readLine() != null)
            {
        navneord[i]=linie;
        i++;
          }

        inFile.close();

        Arrays.sort(navneord);

        System.out.println(navneord[(int)(10*Math.random())]+" og "+navneord[(int)(10*Math.random())]);
    }
}
Avatar billede arne_v Ekspert
11. december 2003 - 22:18 #1
Du mener uden tvivl:

while ((linie = inFile.readLine()) != null)
Avatar billede arne_v Ekspert
11. december 2003 - 22:19 #2
Fordi ellers giver du alle navneord samme værdi.
Avatar billede erikjacobsen Ekspert
11. december 2003 - 22:19 #3
Du skal nok have selve læsningen til at være

        int i=0;
        while ((line=inFile.readLine()) != null)
            {
        navneord[i]=linie;
        i++;
          }

men ved du der altid er 20 linier i filen??
Avatar billede ozman Nybegynder
11. december 2003 - 22:21 #4
så siger den bare
" Exception in thread "main" java.lang.NullPointerException"
Avatar billede erikjacobsen Ekspert
11. december 2003 - 22:22 #5
men ved du der altid er 20 linier i filen??

Du skulle måske bare bruge en ArrayList i stedet for?
Avatar billede ozman Nybegynder
11. december 2003 - 22:22 #6
ja jeg ved at der altid er max 20 linier i filen.
Avatar billede arne_v Ekspert
11. december 2003 - 22:22 #7
Du skal også have slettet readLinen ovenover while.
Avatar billede erikjacobsen Ekspert
11. december 2003 - 22:22 #8
Jeg spurgte ikke om max ;))
Avatar billede arne_v Ekspert
11. december 2003 - 22:22 #9
import java.util.*;
import java.io.*;

public class Ord {
    public static void main(String[] args) throws Exception {
        String linie, file = "mineord.dat";
        String[] navneord = new String[20];

        FileReader fr = new FileReader(file);
        BufferedReader inFile = new BufferedReader(fr);

        int i = 0;
        while ((linie = inFile.readLine()) != null) {
            navneord[i] = linie;
            i++;
        }

        inFile.close();

        Arrays.sort(navneord);

        System.out.println(
            navneord[(int) (10 * Math.random())]
                + " og "
                + navneord[(int) (10 * Math.random())]);
    }
}
Avatar billede arne_v Ekspert
11. december 2003 - 22:23 #10
Måske:

    import java.util.*;
import java.io.*;

public class Ord {
    public static void main(String[] args) throws Exception {
        String linie, file = "mineord.dat";
        String[] navneord = new String[20];

        FileReader fr = new FileReader(file);
        BufferedReader inFile = new BufferedReader(fr);

        int i = 0;
        while ((linie = inFile.readLine()) != null) {
            navneord[i] = linie;
            i++;
        }

        inFile.close();

        Arrays.sort(navneord);

        System.out.println(
            navneord[(int) (20 * Math.random())]
                + " og "
                + navneord[(int) (20 * Math.random())]);
    }
}
Avatar billede ozman Nybegynder
11. december 2003 - 22:28 #11
arne v. Hvis jeg kører det du har skrevet får jeg følgende fejl:

Exception in thread "main" java.lang.NullPointerException
        at java.util.Arrays.mergeSort(Arrays.java:1124)
        at java.util.Arrays.mergeSort(Arrays.java:1131)
        at java.util.Arrays.mergeSort(Arrays.java:1132)
        at java.util.Arrays.sort(Arrays.java:1074)
        at Ord2.main(Ord2.java:23)
Avatar billede arne_v Ekspert
11. december 2003 - 22:29 #12
Ikke hvis der er 20 linier i filen.

(jeg har selv testet)
Avatar billede ozman Nybegynder
11. december 2003 - 22:31 #13
Nååå nej. Det er da også rigtigt. Sorry! Skal du lige svare?
Avatar billede arne_v Ekspert
11. december 2003 - 22:31 #14
OK
Avatar billede arne_v Ekspert
11. december 2003 - 22:38 #15
Hvis du vil gøre dit program mere robust så skal du følge Eriks forslag om
en ArrayList.

Eksempel:

import java.util.*;
import java.io.*;

public class Ord {
    public static void main(String[] args) throws Exception {
        String linie;
        String file = "mineord.dat";
        FileReader fr = new FileReader(file);
        BufferedReader inFile = new BufferedReader(fr);
        ArrayList list = new ArrayList();
        while ((linie = inFile.readLine()) != null) {
            list.add(linie);
        }
        inFile.close();
        String[] navneord = new String[list.size()];
        for (int i = 0; i < list.size(); i++) {
            navneord[i] = (String) list.get(i);
        }
        Arrays.sort(navneord);
        System.out.println(
            navneord[(int) (navneord.length * Math.random())]
                + " og "
                + navneord[(int) (navneord.length * Math.random())]);
    }
}
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