magnus1992 Skrevet 17. september 2012 Del Skrevet 17. september 2012 Jobber nå med Oblig 2 i INF1000 og den fugerer forsåvidt greit. Jeg lurer likevel på om måten jeg har løst oppgaven på er unødvendig tungvindt. om noen gidder å se på koden, og kanskje komme med noen tips til å forkorte den, hadde det vært strålende! PS. Legger ved hele koden, så om du sliter med oppgaven kan du også kanskje få noen tips! Men, ikke kopier hele greia og lever før meg, da blir jeg tatt for juks! import easyIO.*; class Oblig2 { public static void main(String [] args) { System.out.print("\n" + "--------Velkommen til Ruritaninas oljeadministrasjon--------"); Olje olje = new Olje(); olje.adminLoop(); System.out.println("--------Takk for at du brukte dette programmet--------"); } } class Olje { In tast = new In(); Out skjerm = new Out(); int rad; int kolonne; String [][] eier = new String[10][20]; double [][] utvunnet = new double[10][20]; double total=0; void adminLoop() { int ordre= 0; skjerm.outln(); while(ordre !=6) { String meny=("\n" + "Vennligst velg en kommando" + "\n" + "\n" + "\t" + "1) Kjøp et felt" + "\n" + "\t" + "2) Annuler kjøp av felt" + "\n" +"\t" + "3) Oversiktskart" + "\n" +"\t" + "4) Oppdater oljeutvinning" + "\n" +"\t" + "5) Vis oljeselskap" + "\n" +"\t" + "6) Avslutt program"); skjerm.outln(meny); skjerm.out("Velger: "); ordre=tast.inInt(); skjerm.outln(); switch (ordre) { case 1: kjopFelt();break; case 2: annulerKjop();break; case 3: oversikt();break; case 4: oppdaterOlje();break; case 5: oljeselskap();break; case 6: avsluttProgram();break; default: skjerm.outln("Ugyldig! Bruk tallene 1-5 i menyen. 6 for å avslutte" + "\n"); break; } } } void kjopFelt() { skjerm.outln("\n" + "**Kjøp et felt**" + "\n"); skjerm.out("Oppgi selskapets navn: " + "\n"); String navn=tast.inLine(); skjerm.out("\n" + "I hvilken radnr vil du kjøpe?(0-9) "); int rad=tast.inInt(); skjerm.out("\n" + "I hvilken kolnr vil du kjøpe?(0-19) "); int kolonne=tast.inInt(); if(eier[rad][kolonne]==null) { for(int i=0; i<utvunnet.length; i++) { for(int j=0; j<utvunnet.length; j++) { eier[rad][kolonne]=navn; } } skjerm.outln("\n" + eier[rad][kolonne]+ " har kjøpt feltet " + rad + "-" + kolonne); skjerm.outln(); }else{ skjerm.outln("\n" + "Desverre " + navn + ", dette feltet er dette feltet er allerede kjøpt av: " + eier[rad][kolonne]); } } void annulerKjop() { skjerm.outln("**Annuler kjøp**"+"\n"); skjerm.out("Selskapets navn: "); String navn=tast.inLine(); //ser om selskapet er registrert //ser om angitte felter er registrert som kjøpt //!!!!!!!VIKTIG!!!!!!! SE OM DET REGISTRERTE SELSKAPET FAKTISK EIER FELTENE!!!!!!!!!!!! //denne kjører dobbbbbbelt!!!!!!!!!FIKS DET boolean funnet = false; //boolean hume=false; for(int i=0; i<eier.length; i++) { for(int j=0; j<eier[i].length; j++) { if(navn.equals(eier[i][j]) && !funnet) { //hume=true; funnet=true; skjerm.outln("Hvilke kjøp av felter skal " + navn + " annulere?" + "\n"); skjerm.out("Radnr: "); rad=tast.inInt(); skjerm.out("Kolnr: "); kolonne=tast.inInt(); if(eier[i][j].equals(eier[rad][kolonne]) && eier[rad][kolonne]!=null) { skjerm.outln("\n" + navn + " eier ikke lenger felt " + rad + "-" + kolonne); eier[rad][kolonne]=null; }else{ skjerm.out("Du eier ikke dette feltet, det gjør "); if(eier[rad][kolonne]== null) { skjerm.out("heller ingen andre. Prøv igjen!"); }else{ skjerm.out(eier[rad][kolonne] + ". Prøv igjen!"); } } } } } if (funnet != true) { skjerm.outln("\n"+"Dette selskapet har ingen registrerte oljefelter!"); } } void oversikt() { skjerm.outln("**Oversiktskart**" + "\n"); skjerm.out(" 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19"); for(int i=0; i<10; i++) { skjerm.outln(); skjerm.outln(); if (i<11) { skjerm.out(i); } for(int j=0; j<20; j++) { if (eier[i][j] != null) { skjerm.out(" x "); }else{ skjerm.out(" . "); } } } skjerm.outln(); } void oppdaterOlje() { double fat; skjerm.outln("**Oppdater oljeutvinning**" + "\n"); skjerm.out("Selskapets navn: "); String navn=tast.inLine(); //boolean hume=false; boolean funnet = false; for(int i=0; i<eier.length; i++) { for(int j=0; j<eier[i].length; j++) { if(navn.equals(eier[i][j]) && !funnet) { funnet=true; //hume=true; skjerm.outln("Hvilke felter skal oppdaters?" + "\n"); skjerm.out("Radnr: "); rad=tast.inInt(); skjerm.out("Kolnr: "); kolonne=tast.inInt(); if(eier[i][j].equals(eier[rad][kolonne]) && eier[rad][kolonne]!=null) { skjerm.outln("\n" + "Felt " + rad + "-" + kolonne + " nåværende utvunnet mengde er " + utvunnet[rad][kolonne] + " fat"); skjerm.out("\n" + "Ny utvunnet olje (i fat) "); fat = tast.inDouble(); utvunnet[rad][kolonne]=utvunnet[rad][kolonne] + fat; skjerm.outln("\n" + navn + " har utvunnet " + fat + " fat. Totalt utvunnet på felt " + rad + "-" + kolonne + " : " + utvunnet[rad][kolonne] + " fat."); }else{ skjerm.out("\n" + "Beklager. Felt " + rad + "-" + kolonne + " har ingen eiere. Prøv igjen!" + "\n"); } } } } } void oljeselskap() { double total=0; skjerm.outln("**Hva eier oljeselskapet**" +"\n"); skjerm.out("Selskapets navn: "); String navn=tast.inLine(); boolean funnet = false; for(int i=0; i<eier.length; i++) { for(int j=0; j<eier[i].length; j++) { if(navn.equals(eier[i][j]) && eier[i][j]!=null) { funnet=true; skjerm.outln(navn + " eier felt: " + i + "-" + j); } } } //regner totalt utvunnet olje for(int i=0; i<eier.length; i++) { for(int j=0; j<eier[i].length; j++) { if(navn.equals(eier[i][j])) { total+=utvunnet[i][j]; } } } skjerm.outln("Totalt utvunnet for " + navn + " " + total + " fat."); if(funnet !=true) { skjerm.outln(navn + " eier foreløpig ingen oljefelt."); } } void avsluttProgram() { System.exit(1); } } Lenke til kommentar
Kiff Skrevet 18. september 2012 Del Skrevet 18. september 2012 Jeg regner med objekt orientert programmering ikke er pensum før i slutten av semesteret eller i neste semester, så det legger litt begrensninger på restrukturering. Prøv å se etter ting du gjør ofte (som å be bruker om selskapsnavn eller hente koordinater) og gjør det i egne metode, f.eks: private int[] hentXY() { int[] result = { -1, -1 }; while (!(result[0] >= 0 && result[0] <= 9)) { skjerm.out("Radnr: "); result[0] = tast.inInt(); } while (!(result[1] >= 0 && result[1] <= 19)) { skjerm.out("Kolnr: "); result[1] = tast.inInt(); } } Lenke til kommentar
magnus1992 Skrevet 11. oktober 2012 Forfatter Del Skrevet 11. oktober 2012 Send meg mail Arne Maus når du ønsker å få koden fjernet! Lenke til kommentar
hjahre Skrevet 16. oktober 2012 Del Skrevet 16. oktober 2012 Ah, INF1000, det vekker minner Det jeg husker er at jeg hata EasyIO, ettersom du bare vil få bruk for det i INF1000. I INF1010 er det BufferedReader og Scanner som er tingen. Én ting du kan gjøre er å drite i class Olje og heller bruke class Oblig2 . Det vil bli som dette class Oblig2 { public static void main(String [] args) { System.out.print("\n" + "--------Velkommen til Ruritaninas oljeadministrasjon--------"); Oblig2 olje = new Oblig2(); olje.adminLoop(); System.out.println("--------Takk for at du brukte dette programmet--------"); } … Lenke til kommentar
jonny Skrevet 16. oktober 2012 Del Skrevet 16. oktober 2012 Her er noen tips: - generelt: skriv egne metoder for å lese inn data fra brukeren (signaturen kan f.eks. se slik ut: private int lesInt(String beskjed, int min, int max)) og bruk disse i de forskjellige metodene for å gjøre de mer oversiktlige - kjopFelt(): denne inneholder løkker som kan fjernes - annulerKjop() + oppdaterOlje(): her kan du ta vare på rad og kolonne og avbryte løkka når sjekken slår til, og flytte koden inne i løkka til etter løkka isteden - oljeselskap(): her kan du kombinere de to løkkene - "funnet != true" kan bedre skrives som "!funnet" Lenke til kommentar
GeirGrusom Skrevet 16. oktober 2012 Del Skrevet 16. oktober 2012 Én ting jeg mener: dersom du skal skrive norsk i koden, så bruk også Norske tegn også, og lagre filen som UTF-8 eller UTF-16. Eller skriv på engelsk. blaabaersyltetoey ser helt dustete ut. Min mening dog. Lenke til kommentar
jonny Skrevet 16. oktober 2012 Del Skrevet 16. oktober 2012 Er i prinsippet enig med deg, men man kan fort spare seg for mye trøbbel ved å unngå norske tegn (i hvertfall når man studerer ved UiO, der brukes latin1 som standard tegnsett ennå... blir fort litt trøbbel hvis man ikke er oppmerksom på dette). Selv foretrekker jeg absolutt å skrive kode på engelsk. 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å