Gå til innhold

Boblesortering av tekst i en matrise. LØST


Anbefalte innlegg

Skrevet (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 av TheGreatOne
Videoannonse
Annonse
Skrevet

Det kan forresten ikke være hele koden, for jeg ikke se ordMat deklarert, ei heller tildelt variabler, alas ordMat = {"jeg", "vil", "ha" } ...

Skrevet (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 av TheGreatOne
Skrevet

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?

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...