Gå til innhold

Boblesortering av tekst i en matrise. LØST


Anbefalte innlegg

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 av TheGreatOne
Lenke til kommentar
Videoannonse
Annonse

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 av TheGreatOne
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...