Gå til innhold

Scanner, lese fra fil problem...


Anbefalte innlegg

Jeg har denne tekstfilen:

 

150.0;

3;7;50;Habibah

4;5;100;Ali

 

Jeg prøver å lese den ved hjelp av denne koden;

 

	void lesFraFil(){
	try{

		Scanner infil = new Scanner(new File("olje.txt"));


		infil.useDelimiter("[;\\s]+");
		tot_utvinning = infil.nextDouble(); //denne linjen skal lese øverste linje i tekstfilen.
		//while løkken leser de resterende linjene i tekstfilen, og gjør noe med dem.
		while(infil.hasNext()){
			int rad = infil.nextInt();
			int kol = infil.nextInt();
			int utvinning = infil.nextInt();
			String selskap = infil.next();

			utvunnet[rad][kol]= utvinning;
			eier[rad][kol]= selskap;
		}

		infil.close();

	}catch (Exception e) {
		System.out.println(e);
	}

}

 

Og får denne feilmeldingen:

java.util.InputMismatchException

 

Som er en link til noe som heter "Java Exception Breakpoint" med diverse valg...

 

Jeg klarer å lese filen fint, hvis ikke den øverste linja er med, altså når bare de "like linjene" er med, og jeg ikke har med linja over while-løkken i koden seff.

 

Hva gjør jeg feil, og hvordan får jeg til å lese fila og lagre i variablene slik jeg ønsker?

Lenke til kommentar
Videoannonse
Annonse

Får ingen feil når jeg kjører koden din ... tror du enten kjører annen kode, eller mot annen datafil ...

 

(har kommentert vekk

 

utvunnet[rad][kol]= utvinning;

 

eier[rad][kol]= selskap;

 

siden du ikke postet komplett kode ... men de skulle jo ikke gi den exception'en ...)

Endret av quantum
Lenke til kommentar

Jeg får faktisk ikke opp hvilken linje feilen dukker opp på, jeg bruker eclipse...

 

Jeg kjører denne koden altså, har bare kopiert og limt inn her... poster den komplette koden, selv om den kan være litt kjedelig å lese ettersom jeg ikke har kommentert den noe særlig...

 

Lurer på om koden min ovenfor i teorien burde være grei? Jeg er meget fersk, så jeg lurer...

 

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

public class Oblig_2_inf1000 {


public static void main(String args[]){

	Olje ol = new Olje();
	ol.kommandolokke();
	System.out.println("Have a nice day!");


}//main
}//Oblig_2_inf1000

class Olje{
Scanner scan = new Scanner(System.in);
Scanner scan2 = new Scanner(System.in);
String[][] eier = new String [10][15];
int[][] utvunnet = new int [10][15];
double tot_utvinning = 0;
int solgte_felt = 0;

void kommandolokke(){
	int kommando = -1;

	while(kommando != 0){
		System.out.println();
		System.out.println("*** Utopias Oljefeltadministrasjon ***");
		System.out.println("Meny:");
		System.out.println("1. Kjøp et felt");
		System.out.println("2. Liste over solgte felt");
		System.out.println("3. Lag oversiktskart med statistikk");
		System.out.println("4. Oppdater oljeutvinning");
		System.out.println("5. Finn raden med høyest oljeutvinning");
		System.out.println("6. Skriv til fil");
		System.out.println("7. Les fra fil");
		System.out.println("0. Avslutt");
		System.out.println();
		System.out.println("Gjør et valg:");
		kommando = scan.nextInt();

		switch (kommando){

		case 1: kjopFelt();break;
		case 2: listeOverSolgteFelt();break;
		case 3: lagOversiktskartMedStatistikk();break;
		case 4: oppdaterOljeutvinning();break;
		case 5: finnRadenMedHoyestOljeutvinning();break;
		case 6: skrivTilFil();break;
		case 7: lesFraFil();break;
		default: break;

		}
	}
}

void kjopFelt(){

	System.out.println("Hvilket felt vil du kjøpe?");
	System.out.println("radnummer:");
	int radnr = scan.nextInt();
	System.out.println("kolonnenummer:");
	int kolnr = scan.nextInt();
	System.out.println("Hvem vil kjøpe feltet?");
	String selskap = scan2.nextLine();

	if (eier[radnr][kolnr] == null){

		eier[radnr][kolnr] = selskap;
		System.out.println(eier[radnr][kolnr] + " eier nå feltet " + radnr + '-' + kolnr);

	}else if(eier[radnr][kolnr].equals(selskap)){

		System.out.println(eier[radnr][kolnr] + " eier allerede felt " + radnr + '-' + kolnr);
	}else{

		System.out.println(eier[radnr][kolnr] + " eier felt " + radnr + '-' + kolnr);
		System.out.println("Skal du virkelig kjøpe det?");
		String svar = scan2.nextLine();

		if (svar.equals("ja")){

			eier[radnr][kolnr] = selskap;
			System.out.println(eier[radnr][kolnr] + " eier nå feltet " + radnr + '-' + kolnr);
		}
	}
}

void listeOverSolgteFelt(){

	for(int i=0; i < eier.length; i++){
		for (int k=0; k < eier[i].length; k++){
			if(eier[i][k] != null){
				System.out.println("Feltet " + i + '-' + k + " eies av " + eier[i][k] +  '.' + " Total utvinning " + utvunnet[i][k] + '.');
			}//if
		}
	}
}//listeOverSolgteFelt

void lagOversiktskartMedStatistikk(){
	System.out.print(' ');
	for(int j=0; j < eier[1].length; j++){
		System.out.printf("%3d",j);
	}
	System.out.println();
	for(int i=0; i < eier.length; i++){
		System.out.print(i);
		for (int k=0; k < eier[i].length; k++){
			if(eier[i][k]!= null){
				System.out.printf("%3c",'x');
				solgte_felt++;
			}else{
			System.out.printf("%3c",'.');
			}
		}System.out.println();
	}
	System.out.println();
	System.out.println("Antall solgte felt: " + solgte_felt);
	System.out.println("Total utvinning: " + tot_utvinning);
	System.out.println("Gjennomsnittlig utvinning: " + tot_utvinning/solgte_felt + "fat pr. solgte felt");

}//lagOversiktskartMedStatistikk

void oppdaterOljeutvinning(){

	for(int i=0; i < eier.length; i++){
		for (int k=0; k < eier[i].length; k++){
			if(eier[i][k] != null){
				System.out.println("Antall fat utvunnet i felt " + i + '-' + k + " siste 6 måneder. " + " (Tidligere totalt " + utvunnet[i][k] + " fat.)");
				int update = scan.nextInt();
				utvunnet[i][k] += update;
				tot_utvinning += update;
			}//if
		}
	}

}

void finnRadenMedHoyestOljeutvinning(){
	int[] radutvinning = new int[10];
	int rad = 0;
	for(int i=0; i < eier.length; i++){
		for (int k=0; k < eier[i].length; k++){
				rad += utvunnet[i][k];
			}
			radutvinning[i]= rad;
			rad=0;
		}

	int hoyest=0;
	int hoyestRad=0;
	for(int i = 0; i<radutvinning.length; i++){
		if(radutvinning[i]>hoyest){
			hoyest=radutvinning[i];
			hoyestRad=i;
		}
	}
	System.out.println("Raden med høyest utvinning er rad nummer : " +hoyestRad);
}

void skrivTilFil(){
	try{
		PrintWriter utfil = new PrintWriter(new File("olje.txt"));

		utfil.println(tot_utvinning + ";");
		for(int i=0; i < eier.length; i++){
			for (int k=0; k < eier[i].length; k++){
				if(eier[i][k] != null){
					utfil.println(i + ";" + k + ";" + utvunnet[i][k] + ";" + eier[i][k]);
				}//if
			}
		}
		utfil.close();
	}catch (Exception e){
		System.out.println(e);
	}
}//skrivTilFil

void lesFraFil(){
	try{

		Scanner infil = new Scanner(new File("olje.txt"));


		infil.useDelimiter("[;\\s]+");
		tot_utvinning = infil.nextDouble();
		while(infil.hasNext()){
			int rad = infil.nextInt();
			int kol = infil.nextInt();
			int utvinning = infil.nextInt();
			String selskap = infil.next();

			utvunnet[rad][kol]= utvinning;
			eier[rad][kol]= selskap;
		}

		infil.close();

	}catch (Exception e) {
		System.out.println(e);
	}

}



} //class Olje

Lenke til kommentar

Merkelig at jeg ikke fikk noen feil, den leste inn første linja før løkka, og gikk så to ganger i løkke for å lese de to neste linjene.

 

Når du får en exception så vil systemet printe ut en stacktrace til stdout. Anbefaler deg å bruke et verktøy hvor du får se denne stacktracen, da får vi se hvor det butter. Det enkleste er kanskje å kjøre det fra kommandolinja, da trenger du ikke noe verktøy annet enn jdk.

 

edit: kjører fortsatt helt fint når jeg bruker hele kildekoden . . . det kan vel da omtrent bare være en ting som er feil, og det er at fila di ligger et annet sted enn programmet ditt ser etter den. prøv med en komplett stivei (det er det jeg gjør når jeg kjører det).

Endret av quantum
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...