Problem i filinläsning [Java]

Permalänk
Medlem

Problem i filinläsning [Java]

jag håller på med ett skolarbete men jag har kört fast. Jag ska läsa in konton och lånkonton från text filer och sen skriva ut dem. Detta fungerar bra för kunder, Konton och Transaktioner. Men inte för lån, och jag fattar verkligen inte varför.

I huvudklassen så läser jag inte från textfilerna, jag skriver även ut där.
Jag har även med klasserna för konto och lån här så man kan jämföra dem. Sen har jag lagt text filerna längst ner i inlägget så ni kan se om jag gjort fel där. Jag har suttit med det här ett tag nu och fattar inte vad jag gjort för fel. Jag uppskattar verkligen all hjälp jag kan få. Det är säkert inget svårt fel, men jag lyckas inte hitta felet.

Edit: Jag har prövat att ändra i loan.txt filen och ta bort eller lägga till ett kommatecken(som då bryter för ni del i inmatningen) och då klagar programmet och säger att det är fel i filen. Så den kommer ju åt och ser att det är saker i loan. Men den verkar inte vilja lägga in loan.txt i array som det görs med konto filen.
Huvudklass

import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.util.InputMismatchException; public class Banksystem { public static void main(String[]args){//används för inmatning av kundfilen java.util.Scanner s2 = new java.util.Scanner(System.in); File personfil = new File("kunder.txt"); try { FileReader fr = new FileReader(personfil); BufferedReader br = new BufferedReader(fr); String s = br.readLine(); while (s != null){ String[] personarray = s.split(","); if (personarray.length == 5){ new Kunder(personarray[0], personarray[1],personarray[2], personarray[3], personarray[4]); } s = br.readLine(); } br.close(); } catch (Exception e){ e.printStackTrace(); } File kontofil = new File("konto.txt"); //används för inmatning av kontofilen try { FileReader fr = new FileReader(kontofil); BufferedReader br = new BufferedReader(fr); String s = br.readLine(); while (s != null){ String[]kontoarray = s.split(","); if (kontoarray.length == 5){ if (kontoarray[3].equals("vanlig")) { // skapa vanligt konto } else { // skapa lånekonto } new Konto(Integer.parseInt(kontoarray[0]),kontoarray[1],Double.parseDouble(kontoarray[2]),kontoarray[3], kontoarray[4]); } s = br.readLine(); } br.close(); } catch (Exception e){ e.printStackTrace(); } File transfil = new File("transaktion.txt"); //används för inmatning av Transaktioner try { FileReader fr = new FileReader(transfil); BufferedReader br = new BufferedReader(fr); String s = br.readLine(); while (s != null){ String[] transaktionarray = s.split(","); if (transaktionarray.length == 4){ new Transaktion(Double.parseDouble(transaktionarray[0]),transaktionarray[1],transaktionarray[2],transaktionarray[3]); } s = br.readLine(); } br.close(); } catch (Exception e){ e.printStackTrace(); } File loanfil = new File("loan.txt"); try { FileReader ar = new FileReader(loanfil); BufferedReader br = new BufferedReader(ar); String s = br.readLine(); while (s != null){ String[] loanarray = s.split(","); if (loanarray.length == 3){ new Loan(loanarray[0],loanarray[1],Double.parseDouble(loanarray[2]),loanarray[3]); } s = br.readLine(); } br.close(); } catch (Exception e){ e.printStackTrace(); } System.out.println("Välkommen till Speers bank"); //Skriver ut text for (Kunder kund : Kunder.a1) { System.out.println( kund); //For loopar för att kunna skriva ut information från arrays } for (Konto kud : Konto.a2) { System.out.println( kud);} for(Transaktion ts : Transaktion.a3){ System.out.println(ts); } for (Loan ln : Loan.a5){ System.out.println(ln); } System.out.println(Loan.a5); System.out.println(Konto.a2); System.out.println(Transaktion.a3); System.out.print("Mata in personnummer för att välja kund: "); String a = s2.nextLine(); System.out.print(Konto.getKonto(a)); } }

Loan klass

import java.util.ArrayList; public class Loan { public String personnummer; public String kontotyp; public double saldo; public String kontonummer; public static Loan[] loanvektor(){ return a5.toArray(new Loan[1]); } public static ArrayList<Loan> a5 = new ArrayList<Loan>(); public Loan(String pn, String kt, double so, String kn){ personnummer = pn; kontotyp = kt; saldo = so; kontonummer = kn; a5.add(this); } public Loan(){ a5.add(this); } public String getPersonnummer() { return personnummer; } public void setPersonnummer(String personnummer) { this.personnummer = personnummer; } public String getKontotyp() { return kontotyp; } public void setKontotyp(String kontotyp) { this.kontotyp = kontotyp; } public double getSaldo() { return saldo; } public void setSaldo(double saldo) { this.saldo = saldo; } public String getKontonummer() { return kontonummer; } public void setKontonummer(String kontonummer) { this.kontonummer = kontonummer; } @Override public String toString() { return "Loan [personnummer=" + personnummer + ", kontotyp=" + kontotyp + ", saldo=" + saldo + ", kontonummer=" + kontonummer + "]"; } }

Konto klass

import java.util.ArrayList; public class Konto { private int kontonr; private String kontonamn; private double saldo; private String kontotyp; private String personnummer; public static Konto[] kontovektor(){ return a2.toArray(new Konto[1]); }//Skapar en kontoarray public static ArrayList<Konto> a2 = new ArrayList<Konto> ();//En arraylist bestående av konton //Konstruktor för konton public Konto(int knr, String knamn, double sal, String typ, String pn){ kontonr = knr; kontonamn = knamn; saldo = sal; kontotyp = typ; personnummer = pn; a2.add(this); } public Konto(){ a2.add(this); } //Getters and Setters för att kunna använda värden i konton public int getKontonr() { return kontonr; } public void setKontonr(int kontonr) { this.kontonr = kontonr; } public String getKontonamn() { return kontonamn; } public void setKontonamn(String kontonamn) { this.kontonamn = kontonamn; } public double getSaldo() { return saldo; } public void setSaldo(double saldo) { this.saldo = saldo; } public String getKontotyp() { return kontotyp; } public void setKontotyp(String kontotyp) { this.kontotyp = kontotyp; } public String getPersonnummer() { return personnummer; } public void setPersonnummer(String personnummer) { this.personnummer = personnummer; } @Override public String toString() { return "Konto [kontonr= " + kontonr + ", kontonamn= " + kontonamn + ", saldo= " + saldo + ", kontotyp= " + kontotyp + ", personnummer= " + personnummer + "]"; } public static String getKonto(String p) { String konton = ""; for (int indexPos = 0; indexPos < a2.size(); indexPos++) { if (a2.get(indexPos).personnummer.equals(p)) { konton += a2.get(indexPos).toString() + "\n"; } } return konton; } }

Lån text filen

19920101,lånkonto,10000,2001 19920102,lånkonto,500000,2002 19220403,lånkonto,04343,2003

Konto textfilen

10000,sparkonto,1999001,vanlig,19920101 10001,sparkonto,1942420,vanlig,19920102 10002,sparkonto,10000,vanlig,19220403 10003,sparkonto,454354,vanlig,19220403

Visa signatur

Speldator: i5 4670k stock | 8GB ram | Asus Z87-plus | Xonar Essence STX | SSD: Intel g2 , Samsung 830 256gb | R9 290 Tri-x | Define R4| Win 8 | Noctua nh-u12p | Qpad Mk-50
marinlik.wordpress.com/ Min blogg för nedbrytning av spel och diverse andra artiklar om NFL
500px.com/niclasbrundell

Permalänk
Medlem

Jag skulle börja med att göra nya klasser som hanterar, kunder, konton, transaktion och dylikt, dessa i sin tur kan ha en arraylist och kan även ha som uppgift att läsa från filer.

Har du tid och kan så tycker jag du ska köra detta från en databas och skippa att läsa från filer.

När man läser på forum nuförtiden så har folk ingen aning om hur man debugar, lär inte skolorna ut detta längre?
Det är ju en enorm viktig del inom programmering.

Så mitt tips är att debuga din kod så kommer du hitta ditt fel direkt.

//NP^

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem
Skrivet av NoPaiN^:

Jag skulle börja med att göra nya klasser som hanterar, kunder, konton, transaktion och dylikt, dessa i sin tur kan ha en arraylist och kan även ha som uppgift att läsa från filer.

Har du tid och kan så tycker jag du ska köra detta från en databas och skippa att läsa från filer.

När man läser på forum nuförtiden så har folk ingen aning om hur man debugar, lär inte skolorna ut detta längre?
Det är ju en enorm viktig del inom programmering.

Så mitt tips är att debuga din kod så kommer du hitta ditt fel direkt.

//NP^

Hej. Jag har klasser som hanterar var och en av kunder, konton och transaktioner. Sen så måste vi tyvärr läsa in från filer, även om vi inte fått lära oss exakt hur man gör det. Utan vi får klistra in färdig kod för det. Det som gör mig så konfunderad är att det funkar i alla andra klasser, men just för lånklassen verkar inte vilja sammarbeta.

Visa signatur

Speldator: i5 4670k stock | 8GB ram | Asus Z87-plus | Xonar Essence STX | SSD: Intel g2 , Samsung 830 256gb | R9 290 Tri-x | Define R4| Win 8 | Noctua nh-u12p | Qpad Mk-50
marinlik.wordpress.com/ Min blogg för nedbrytning av spel och diverse andra artiklar om NFL
500px.com/niclasbrundell

Permalänk
Medlem

Har du provat debuga?

När jag kollar lite snabbt så ser jag följande i din kod:

if (loanarray.length == 3)

din loan.txt har följande data
19920101,lånkonto,10000,2001

Splitar du denna kommer din array att se ut på följande sett:
position 0 = 19920101
position 1 = lånkonto
position 2 = 10000
position 3 = 2001

Du ser rätt snabbt här att längden blir 4?

Sen så menade jag att du ska göra handlers, inte baka in det i dina klasser.

Sen så bör du hantera det på nåt mer dynamiskt sätt.

//NP^

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem
Skrivet av NoPaiN^:

Har du provat debuga?

När jag kollar lite snabbt så ser jag följande i din kod:

if (loanarray.length == 3)

din loan.txt har följande data
19920101,lånkonto,10000,2001

Splitar du denna kommer din array att se ut på följande sett:
position 0 = 19920101
position 1 = lånkonto
position 2 = 10000
position 3 = 2001

Du ser rätt snabbt här att längden blir 4?

Sen så menade jag att du ska göra handlers, inte baka in det i dina klasser.

Sen så bör du hantera det på nåt mer dynamiskt sätt.

//NP^

Haha, jag är ju sämst. Lyckades inte ens räkna till 4. Jag hade tänkt fel med längden där och tänkte som att man började på 0 även där. När jag ändrade längd till 4 så började det fungera perfekt. Tackar

Visa signatur

Speldator: i5 4670k stock | 8GB ram | Asus Z87-plus | Xonar Essence STX | SSD: Intel g2 , Samsung 830 256gb | R9 290 Tri-x | Define R4| Win 8 | Noctua nh-u12p | Qpad Mk-50
marinlik.wordpress.com/ Min blogg för nedbrytning av spel och diverse andra artiklar om NFL
500px.com/niclasbrundell