Danjaco Skrevet 13. november 2007 Del Skrevet 13. november 2007 (endret) Sitter med en oppgave nå, og skal sortere alle elmenter i et array alfabetisk med boblesortering. det som befinner seg i arrayet er ord, alle små bokstaver, ingen komma eller punktum. f.eks [0] jeg [1] vil [2] ha [3] mat [4] sier [5] arne Får ingen feil når jeg kompilerer, men så fort jeg kjører får jeg denne: FeilMelding: Exception in thread "main java.lang.NullPointerException at gg.main(gg.java:87) Linje 87: lengd2 = ordMat.length(); NullPointerException: Thrown when an application attempts to use null in a case where an object is required. These include:.... kan jeg : ordMat[b-1].charAt,length som om ordMat[b-1] var en vanlig tekst variabel? Her er koden: String temp = ""; boolean okio = true; int tall1 = 0, tall2 = 0; int lengde1=0, lengde2=0, lengde=0; char ca=' ', cb=' '; for(int a=1; a<ordMat.length; a++){ for(int b=1; b<ordMat.length; b++){ 85 //finner lengde på ordene 86 lengd1 = ordMat[b-1].length(); 87 lengd2 = ordMat[b].length(); 88 //finner korteste ord if(lengde1>=lengde2){ lengde=lengde2; } else{ lengde=lengde1; } //finner bosktaven som kommer først i alfabetet for(int aa=0; aa<lengde; aa++){ ca = ordMat[b-1].charAt(aa); tall1 = (int)ca; cb = ordMat[b].charAt(aa); tall2 = (int)cb; if(tall1>tall2){ okio=true; aa=lengde; } else if(tall1<tall2){ okio=false; aa=lengde; } } //oppdaterer matrise vis plassen før er høyere i alfabetet. if(okio){ temp = ordMat[b-1]; ordMat[b-1] = ordMat[b]; ordMat[b] = temp; } } } Løsning import java.io.*; class Oppgave1c { public static void main(String[] args) throws IOException { String filnavn,filnavn2, tekst = ""; int bokstav, i=0, k=0; boolean ok; final int max = 100; filnavn = "dok01.txt"; filnavn2 = "resultat.txt"; FileReader stromFraFil; FileWriter stromTilFil; PrintWriter skrivTilFil; String[] ordMat; ordMat = new String[max]; stromFraFil = new FileReader(filnavn); stromTilFil = new FileWriter(filnavn2); skrivTilFil = new PrintWriter(stromTilFil); bokstav = stromFraFil.read(); ok = true; //sender data fra fil1 til matrise while(bokstav>0){ if(bokstav == 32){ //-------------------- //sjekker om ordet finnes i matrisen fra før //-------------------- for(k=0; k<100; k++){ if(tekst.equals(ordMat[k])){ k = 101; ok = false; } } if(ok){ ordMat[i] = tekst; i++; } tekst = ""; ok = true; bokstav = stromFraFil.read(); //--------------------- } else if(bokstav == 44 || bokstav == 46){ tekst = tekst; bokstav = stromFraFil.read(); } else{ if((bokstav<91)&&(bokstav>64)){ tekst = tekst + (char)(bokstav+32); bokstav = stromFraFil.read(); } else{ tekst = tekst + (char)bokstav; bokstav = stromFraFil.read(); } } } //-------------------- //boblesortering //-------------------- String temp = ""; boolean okio = true; int tall1 = 0; int tall2 = 0; int lengde1=0, lengde2=0, lengde=0; char ca=' ', cb=' '; for(int a=1; a<ordMat.length; a++){ for(int b=1; b<ordMat.length; b++){ if(ordMat[b] != null){ //finner lengde på ordene lengde1 = ordMat[b-1].length(); lengde2 = ordMat[b].length(); //finner korteste ord if(lengde1>=lengde2){ lengde=lengde2; } else{ lengde=lengde1; } //finner bosktaven som kommer først i alfabetet for(int aa=0; aa<lengde; aa++){ ca = ordMat[b-1].charAt(aa); tall1 = (int)ca; cb = ordMat[b].charAt(aa); tall2 = (int)cb; if(tall1>tall2){ okio=true; aa=lengde; } else if(tall1<tall2){ okio=false; aa=lengde; } } //oppdaterer matrise vis plassen før er høyere i alfabetet. if(okio){ temp = ordMat[b-1]; ordMat[b-1] = ordMat[b]; ordMat[b] = temp; } } } } //-------------------- //-------------------- //skriv fra matrise til fil2 for(int b=0; b<ordMat.length; b++){ skrivTilFil.println(ordMat[b]); System.out.print(ordMat[b]+"\n"); } skrivTilFil.close(); //-------------------- System.out.print("\n"); System.exit(0); } } Endret 13. november 2007 av TheGreatOne Lenke til kommentar
pgdx Skrevet 13. november 2007 Del Skrevet 13. november 2007 kan jeg: ordMat[b-1].charAt,length som om ordMat[b-1] var en vanlig tekst variabel?Ja. Lenke til kommentar
Danjaco Skrevet 13. november 2007 Forfatter Del Skrevet 13. november 2007 Ok, men hvorfor feilmeding i linje 87? Lenke til kommentar
pgdx Skrevet 13. november 2007 Del Skrevet 13. november 2007 Det kan forresten ikke være hele koden, for jeg ikke se ordMat deklarert, ei heller tildelt variabler, alas ordMat = {"jeg", "vil", "ha" } ... Lenke til kommentar
Danjaco Skrevet 13. november 2007 Forfatter Del Skrevet 13. november 2007 (endret) hele filen import java.io.*; class Oppgave1c { public static void main(String[] args) throws IOException { String filnavn,filnavn2, tekst = ""; int bokstav, i=0, k=0; boolean ok; final int max = 100; filnavn = "dok01.txt"; filnavn2 = "resultat.txt"; FileReader stromFraFil; FileWriter stromTilFil; PrintWriter skrivTilFil; String[] ordMat; ordMat = new String[max]; stromFraFil = new FileReader(filnavn); stromTilFil = new FileWriter(filnavn2); skrivTilFil = new PrintWriter(stromTilFil); bokstav = stromFraFil.read(); ok = true; //sender data fra fil1 til matrise while(bokstav>0){ if(bokstav == 32){ //-------------------- //sjekker om ordet finnes i matrisen fra før //-------------------- for(k=0; k<100; k++){ if(tekst.equals(ordMat[k])){ k = 101; ok = false; } } if(ok){ ordMat[i] = tekst; i++; } tekst = ""; ok = true; bokstav = stromFraFil.read(); //--------------------- } else if(bokstav == 44 || bokstav == 46){ tekst = tekst; bokstav = stromFraFil.read(); } else{ if((bokstav<91)&&(bokstav>64)){ tekst = tekst + (char)(bokstav+32); bokstav = stromFraFil.read(); } else{ tekst = tekst + (char)bokstav; bokstav = stromFraFil.read(); } } } //-------------------- //boblesortering //-------------------- String temp = ""; boolean okio = true; int tall1 = 0; int tall2 = 0; int lengde1=0, lengde2=0, lengde=0; char ca=' ', cb=' '; for(int a=1; a<ordMat.length; a++){ for(int b=1; b<ordMat.length; b++){ //finner lengde på ordene lengde1 = ordMat[b-1].length(); lengde2 = ordMat[b].length(); //finner korteste ord if(lengde1>=lengde2){ lengde=lengde2; } else{ lengde=lengde1; } //finner bosktaven som kommer først i alfabetet for(int aa=0; aa<lengde; aa++){ ca = ordMat[b-1].charAt(aa); tall1 = (int)ca; cb = ordMat[b].charAt(aa); tall2 = (int)cb; if(tall1>tall2){ okio=true; aa=lengde; } else if(tall1<tall2){ okio=false; aa=lengde; } } //oppdaterer matrise vis plassen før er høyere i alfabetet. if(okio){ temp = ordMat[b-1]; ordMat[b-1] = ordMat[b]; ordMat[b] = temp; } } } //-------------------- //-------------------- //skriv fra matrise til fil2 for(int b=0; b<ordMat.length; b++){ skrivTilFil.println(ordMat[b]); System.out.print(ordMat[b]+"\n"); } skrivTilFil.close(); //-------------------- System.out.print("\n"); System.exit(0); } } Endret 13. november 2007 av TheGreatOne Lenke til kommentar
pgdx Skrevet 13. november 2007 Del Skrevet 13. november 2007 Vanskelig å lese kode når det ikke er bedre kommentert og du ikke helt vet formålet med klassen, men skal du lese inn nøyaktig 100 ord? Lenke til kommentar
Danjaco Skrevet 13. november 2007 Forfatter Del Skrevet 13. november 2007 nei, men den skal ikke kunne inneholde mer en 100 ord Lenke til kommentar
Danjaco Skrevet 13. november 2007 Forfatter Del Skrevet 13. november 2007 if(ordMat != null) var alt som skulle til =) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå