15. januar 2011 - 17:14Der er
30 kommentarer og 1 løsning
HJÆLP! :)
Hej alle!
Jeg sidder og er godt i gang med mit eksamensprojekt, men bliver mødt af et problem, jeg simpelthen ikke kan finde løsningen på, og håber nu, der er et klogt hoved, der kan hjælpe mig. Det drejer sig om programmering på absolut begynder-niveau!
Jeg har lavet et program, der fungerer som database for GPS-systemer - med et userinterface, hvor det skal være muligt at foretage valg - hvilket fungerer fint. Man kan få vist alt i databasen, søge efter et specifikt produkt, slette et specifikt produkt, oprette et produkt, gemme og hente til/fra fil.
Men jeg ønsker nu at lave fejlmeddelelser for følgende:
1) Når man vælger at få vist alle produkter i databasen, men der ingen produkter er tilføjet. 2) Når man søger, men søgningen ikke giver et resultat. 3)en fejlmeddelelse, når der ikke tastes ét af "kodeordene" fra menuen.
Her er lidt kodning, som sikkert giver lidt mere overblik:
/** * Write a description of class UI here. * * @author (Stine EP) * @version (12.01.2011) */ public class UI { // instance variables - replace the example below with your own private Scanner reader; private Database database;
/** * Constructor for objects of class UI */ public UI() { // initialise instance variables reader = new Scanner(System.in); database = new Database(); }
public static void main(String [ ] args) { UI ui = new UI(); ui.startDatabase(); }
/** * An example of a method - replace this comment with your own * * @param y a sample parameter for a method * @return the sum of x and y */ public void startDatabase() { // put your code here boolean finished = false;
} } public void printWelcome() { System.out.println("Velkommen til databasen over GPS-systemer, nedenfor kan du se dine muligheder. \n");
}
private void printMenu() { System.out.println(); System.out.println("Tast 1, hvis du ønsker at se alt indhold i databasen.\n"); System.out.println("Tast 2, hvis du ønsker at tilføje et produkt til databasen.\n"); System.out.println("Tast 3, hvis du ønsker at slette et produkt fra databasen.\n"); System.out.println("Tast 4, hvis du ønsker at søge efter et produkt i databasen.\n"); System.out.println("Tast 5, hvis du ønsker at gemme til fil.\n"); System.out.println("Tast 6, hvis du ønsker at hente en gemt fil.\n"); System.out.println("Tast 7, hvis du ønsker at afslutte databasen.\n"); System.out.println(); }
public void tilføjModel() { System.out.println("Tilføj et produkt til databasen:"); String model = getInput("Model: "); String fabrikant = getInput("Fabrikant: "); String pris = getInput("Pris, kr: "); String skaermstoerrelse = getInput("Skærmstørrelse, cm: "); database.addProduktinfo(model, fabrikant, pris, skaermstoerrelse); }
public void sletModel() { System.out.println("Slet et produkt fra databasen:"); String model = getInput("Indtast det produkt, du ønsker at slette: "); database.removeProduktinfo(model); System.out.println("Produktet er nu slettet fra databasen"); }
public void søgModel() {
System.out.println("Søg efter et produkt i databasen."); String model = getInput("Indtast det produkt, du ønsker at søge efter: "); database.searchProduktinfo(model); }
private void printFarvel() { System.out.println("Farvel - databasen er nu afsluttet!"); } }
Mit problem er, at jeg har lavet det hele som Strings - og jeg har prøvet 48 konstruktioner, som bare ikke vil give resultat. Jeg er meget tæt på at give op :) Dette er ikke opgivet som noget, der skal fremgå i min opgave, men jeg vil meget gerne kunne det alligevel!
/** * Databasen * * @Stine EP * @12.01.2011 */ public class Database implements Serializable { // instance variables - replace the example below with your own private HashMap<String, Produktinfo> gps; private IO io;
/** * Constructor for objects of class Database */ public Database() { // initialise instance variables gps = new HashMap<String, Produktinfo>(); io = new IO(); }
//Mutator metode, der tilføjer information om det angivne projekt i databasen
public void addProduktinfo(String model, String fabrikant, String pris, String skaermstoerrelse) { // tilføjer via eksternt metodekald (.put) oplysninger i "gps" gps.put(model, new Produktinfo(model, fabrikant, pris, skaermstoerrelse)); System.out.println("Produktet er nu tilføjet databasen"); }
public void removeProduktinfo(String model)//Fjerner den model, der ønskes fjernet { gps.remove(model); System.out.println("Du har nu fjernet produktet: " + model + " fra databasen."); }
public void searchProduktinfo(String model)//Finder den ansøgte model { Produktinfo info1 = gps.get(model); System.out.println(info1.getInfo()); }
public void showProduktinfo()//viser alle i databasen { for(String model: gps.keySet()) { Produktinfo info = gps.get(model); System.out.println(info.getInfo()); } }
public void saveToFile() //Gemmer til fil { io.write(gps); System.out.println("Filer er gemt!"); } public void readFromSavedFile(){ //Henter fra fil gps = io.read(); System.out.println("Filer er indlæst!"); } }
Den returnerer ikke null, hvis der ikke findes noget. Giver det mening? :) Der er ingen throws exeption!
Og det virker på hhv. search og remove. MANGE tak, hvor er du god!
Men hvis du ser på:
1) printMenu(), hvordan skal jeg så få en fejlmeddelelse, hvis brugeren ikke indtaster mellem 1-7? For det er skrevet som String, ikke int. Der ville jeg kunne bruge en if(det indtastede er mindre end 1 og større end 7){ udskriv fejlmeddelelse} Er meget i tvivl om denne del.
2) showProduktinfo() - her kan jeg ikke gennemskue, hvad jeg kan gøre, således jeg skriver en kode for if(der ingen produkter er i databasen){udskriv fejlmeddelelse}
public void showProduktinfo()//viser alle i databasen { for(String model : gps.keySet()) { Produktinfo info = gps.get(model); System.out.println(info.getInfo()); }
Det er en for-løkke, og derfor kan jeg ikke få din kode med if implementeret, den brokker sig over size.
public void showProduktinfo()//viser alle i databasen { if(gps.isEmpty()){ System.out.println("Der er pt. ikke oprettet nogle GPS enheder i databasen."); } else { for(String model : gps.keySet()) { Produktinfo info = gps.get(model); System.out.println(info.getInfo()); } } }
Så, nu virker det, Arne - den udskriver nu fejlmeddelelse, hvis der ingen produkter er i databasen. Er det fordi, isEmpty() er en metode i HashMap? Super sejt, at du lige kunne kringle den!
Nu er der kun problemet med printMenu tilbage, jeg skal nemlig også her have implementeret en fejlmeddelelse, hvis der ikke indtastes mellem "1" og "7".
do { // udskriv menu // indlæs valg n if(n >= 1 && n <= 7) { done = true; } else { // fortæl dem at de skal indtaste tal 1-7 done = false; } } while(!done);
String input, ikke getInput... Men øv, den vil bare slet ikke kompilere. Alternativet er vel at bruge en switch case, men vil bare gerne have det andet til at virke!!
Arne - dit forslag virker fint, hvis jeg indsætter en printMenu();
efter else{ System.out.println("Indtast et tal mellem 1-7"); finished = false; printMenu(); }
For ellers udskrives menuen jo ikke igen! Ihh, hvor er det dejligt, når det lykkedes. Men tit er det, som nybegynder, svært at se alle tingene for sig!
MANGE TAK!!! Skal/kan jeg på nogen måde give point?
Når jeg tester på n, som du skrev, så får jeg godt nok en fejlmeddelelse, men samtidig bliver finished = true, og så afsluttes databasen. Finishhed = true skal først fremkomme, når brugeren taster 7 - "if(inout.contains("7")){ // udskriv farvel finished = true;}
/** * Write a description of class UI here. * * @author (Stine EP) * @version (12.01.2011) */ public class UI { // instance variables - replace the example below with your own private Scanner reader; private Database database;
/** * Constructor for objects of class UI */ public UI() { // initialise instance variables reader = new Scanner(System.in); database = new Database(); }
public static void main(String [ ] args) { UI ui = new UI(); ui.startDatabase(); }
if(input.contains("6")) { database.readFromSavedFile(); } if(input.contains ("7")) { finished = true; printFarvel(); } } } public void printWelcome() { System.out.println("Velkommen til databasen over GPS-systemer, nedenfor kan du se dine muligheder. \n");
}
public void printMenu() { System.out.println(); System.out.println("Tast 1, hvis du ønsker at se alt indhold i databasen.\n"); System.out.println("Tast 2, hvis du ønsker at tilføje et produkt til databasen.\n"); System.out.println("Tast 3, hvis du ønsker at slette et produkt fra databasen.\n"); System.out.println("Tast 4, hvis du ønsker at søge efter et produkt i databasen.\n"); System.out.println("Tast 5, hvis du ønsker at gemme til fil.\n"); System.out.println("Tast 6, hvis du ønsker at hente en gemt fil.\n"); System.out.println("Tast 7, hvis du ønsker at afslutte databasen.\n"); System.out.println(); }
public void tilføjModel() { System.out.println("Tilføj et produkt til databasen:"); String model = getInput("Model: "); String fabrikant = getInput("Fabrikant: "); String pris = getInput("Pris, kr: "); String skaermstoerrelse = getInput("Skærmstørrelse, cm: "); database.addProduktinfo(model, fabrikant, pris, skaermstoerrelse); }
public void sletModel() { System.out.println("Slet et produkt fra databasen:"); String model = getInput("Indtast det produkt, du ønsker at slette: "); database.removeProduktinfo(model); }
public void søgModel() { System.out.println("Søg efter et produkt i databasen."); String model = getInput("Indtast det produkt, du ønsker at søge efter: "); database.searchProduktinfo(model); }
private void printFarvel() { System.out.println("Farvel - databasen er nu afsluttet!"); }
String input = getInput("Indtast valg: "); int valg = Integer.parseInt(input);
switch(valg) { case 1: printAlleModeller(); break;
case 2: tilføjModel(); break; }
Det burde løse dit problem, og så tillader jeg mig at bruge en switch i stedet for en lang række if statements, i min verden er det bare pænere at bruge en switch i dette tilfælde.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.