07. maj 2003 - 11:54Der er
15 kommentarer og 2 løsninger
Problem med at tilføje flere objekter i et LinkedList
Vi er igang med at lave et program der skal kunne gemme en opskrift i en LinkedList. Vi har indtil videre godt kunne gemme opskriften med en ingrediens, men vi vil gerne have det sådan at der kan gemmes f.eks. 3 ingredienser i opskriften. Vi ved at vi på en måde skal bruge en løkke til at få det gjort, men hvordan skal det kobles sammen, og hvor skal løkken placeres, så vi kan få flere ingredienser med til opskriften??
*****USERINTERFACE KLASSEN*******
public void addRecipe(){ recipe.addRecipe(new Recipe (this.recipeName(), new Ingredient(this.ingredientName(), this.ingredientAmount(), this.ingredientType()), this.recipeText())); }
*****RECIPE KLASSEN*******
public Recipe(String rName, Ingredient i, String rText){ recipeName = rName; ingredient = i; recipeText = rText; }
public void addRecipe(Recipe recipe){ allRecipies.add(recipe); }
gør det klart hvad i gør. "public void addRecipe(){" ligner ikke en funktion ted tilføjer en opskrift, men mere en der tilføjer en ingrediens.
og datastrukturen skal også tænkes lidt på; Der skal vel laves linkedlist's i 2 dimensioner. kogebogen er lidt data plus en LinkedList med een opskrift i hvert link. hver opskrift er lidt data plus en linkedlist med een ingrediens i hvert link.
Det kode vi har givet dig, var kun et meget lille uddrag af al vores kode, for at det ikke skulle virke al for uoverskueligt. Vi kan sagtens poste al vores kode her, hvis det gør det nemmere for dig??
Vi har lavet alle de metoder i snakker om, men vi ville ikke bare lige poste al vores kode, for det fylder en del. Men for at i kan få et bedre indtryk i hvad vi laver så poster vi her al vores kode:
public class RunMe{
public static void main(String args[]){
//Laver et UserInterface objekt og kalder metoden Menu UserInterface ui = new UserInterface(); ui.Menu(); } }
//Konstruktor public UserInterface(){ kitchen = new Kitchen(); recipe = new Recipe(); System.out.println(clear); }
//En metode der rydder skærmen public void waitAndClear(){ System.out.println(); Console.readString("Tryk en <enter> for at fortsaette."); System.out.println(); System.out.println(clear); }
//***** public String ingredientName(){ System.out.println(); return Console.readString("Ingredient name?"); }
//**** public double ingredientAmount(){ System.out.println(); return Console.readDouble("Ingredient amount?"); }
//**** public String ingredientType(){ System.out.println(); return Console.readString("Ingredient type (litre, gram, pcs)?"); }
//**** public int ingredientNumber(){ System.out.println(); return Console.readInt("Ingredient number?"); }
//***** public String recipeName(){ System.out.println(); return Console.readString("Recipe name?"); }
//***** public String recipeText(){ System.out.println(); return Console.readString("Recipe text?"); }
//**** public int recipeNumber(){ System.out.println(); return Console.readInt("recipe number?"); }
//En metode der styrer menuen public void Menu(){ String result; boolean keepRunning = true;
do{ result = this.showMenu();
if (result.equals("x")) keepRunning = false; else if (result.equals("1")) this.addIngredient(); else if (result.equals("2")) this.deleteIngredient(); else if (result.equals("3")) this.addRecipe(); else if (result.equals("4")) this.deleteRecipies(); else System.out.println("Invalid input");
this.waitAndClear(); } while (keepRunning); }
//En metode der viser menuen på skærmen public String showMenu(){ System.out.println("||----- MAIN MENU -----||"); System.out.println(); System.out.println("----- Ingredients ------"); System.out.println("1) Add ingedient"); System.out.println("2) Delete ingredient"); System.out.println(); System.out.println("----- Recipies -----"); System.out.println("3) Add recipe"); System.out.println("4) Delete recipe"); System.out.println("5) "); System.out.println("6) "); System.out.println("7) "); System.out.println(); System.out.println("----- EXIT program -----"); System.out.println("x) Exit program"); System.out.println();
return Console.readString(); }
//En metode der gemmer en ingrediens i kitchen klassen public void addIngredient(){ kitchen.addIngredient(new Ingredient(this.ingredientName(), this.ingredientAmount(), this.ingredientType())); }
//En metode der sletter en ingrediens fra kitchen klassen public void deleteIngredient(){
Iterator ingredientIterator = kitchen.getIngredients().iterator(); HashMap identifiers = new HashMap();
int counter=1; while (ingredientIterator.hasNext()){ Ingredient ingredient= (Ingredient)ingredientIterator.next(); identifiers.put(new Integer(counter), ingredient); System.out.println(counter + " :" + ingredient); counter++; }
/* * Cay S. Horstmann & Gary Cornell, Core Java * Published By Sun Microsystems Press/Prentice-Hall * Copyright (C) 1997 Sun Microsystems Inc. * All Rights Reserved. * * Permission to use, copy, modify, and distribute this * software and its documentation for NON-COMMERCIAL purposes * and without fee is hereby granted provided that this * copyright notice appears in all copies. * * THE AUTHORS AND PUBLISHER MAKE NO REPRESENTATIONS OR * WARRANTIES ABOUT THE SUITABILITY OF THE SOFTWARE, EITHER * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. THE AUTHORS * AND PUBLISHER SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED * BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING * THIS SOFTWARE OR ITS DERIVATIVES. */
/** * An easy interface to read numbers and strings from * standard input * @version 1.10 10 Mar 1997 * @author Cay Horstmann */
package corejava;
public class Console { /** * print a prompt on the console but don't print a newline * @param prompt the prompt string to display */
/** * read a string from the console. The string is * terminated by a newline * @return the input string (without the newline) */
public static String readString() { int ch; String r = ""; boolean done = false; while (!done) { try { ch = System.in.read(); if (ch < 0 || (char)ch == '\n') done = true; else if ((char)ch != '\r') // weird--it used to do \r\n translation r = r + (char) ch; } catch(java.io.IOException e) { done = true; } } return r; }
/** * read a string from the console. The string is * terminated by a newline * @param prompt the prompt string to display * @return the input string (without the newline) */
public static String readString(String prompt) { printPrompt(prompt); return readString(); }
/** * read a word from the console. The word is * any set of characters terminated by whitespace * @return the 'word' entered */
public static String readWord() { int ch; String r = ""; boolean done = false; while (!done) { try { ch = System.in.read(); if (ch < 0 || java.lang.Character.isWhitespace((char)ch)) done = true; else r = r + (char) ch; } catch(java.io.IOException e) { done = true; } } return r; }
/** * read an integer from the console. The input is * terminated by a newline * @param prompt the prompt string to display * @return the input value as an int * @exception NumberFormatException if bad input */
public static int readInt(String prompt) { while(true) { printPrompt(prompt); try { return Integer.valueOf (readString().trim()).intValue(); } catch(NumberFormatException e) { System.out.println ("Not an integer. Please try again!"); } } }
/** * read a floating point number from the console. * The input is terminated by a newline * @param prompt the prompt string to display * @return the input value as a double * @exception NumberFormatException if bad input */
String recipeName; int ingredientNumber; Ingredient ingredient; String recipeText;
//LinkedList bliver deklareret private LinkedList allRecipies;
//Constructor der instansierer en LinkedList public Recipe(){ allRecipies = new LinkedList(); }
//**** public Recipe(String rName, Ingredient i, String rText){ recipeName = rName; ingredient = i; recipeText = rText; }
//**** public LinkedList getRecipies(){ return new LinkedList(allRecipies); }
public void addRecipe(Recipe recipe){ allRecipies.add(recipe); }
//Metode der sletter en opskrift public void deleteRecipe(String recipeName){ Iterator recipeIterator = allRecipies.iterator(); while (recipeIterator.hasNext()){ Recipe recipe = (Recipe)recipeIterator.next(); if (recipeName.equals(recipe.getRecipeName())) recipeIterator.remove(); } }
//LinkedList bliver deklareret private LinkedList allIngredients;
//Constructor der instansierer en LinkedList public Kitchen(){ allIngredients = new LinkedList(); }
//**** public LinkedList getIngredients(){ return new LinkedList(allIngredients); }
//Metode der gemmer en ingrediens public void addIngredient(Ingredient ingredient){ allIngredients.add(ingredient); }
//Metode der sletter en ingrediens public void deleteIngredient(String ingredientName){ Iterator ingredientIterator = allIngredients.iterator(); while (ingredientIterator.hasNext()){ Ingredient ingredient = (Ingredient)ingredientIterator.next(); if (ingredientName.equals(ingredient.getIngredientName())) ingredientIterator.remove(); } }
//**** public String getIngredientName(){ return ingredientName; }
//**** public double getIngredientAmount(){ return ingredientAmount; }
//**** public String getIngredientType(){ return ingredientType; }
//Metode som bliver brugt til at vise de oplysninger objektet indeholder. public String toString(){ return ingredientAmount + " " + ingredientType + " " +ingredientName; }
data bør ligge her så spm er værd at kikke på når det er besvaret. Men nej. 'al jeres kode' er jeg ikke en pind interreseret i at se. Det er et vildskud at begynde at kode når i ikke har planlagt HVAD i vil kode.
Og på basis af spm og den smule i viser er det ret klart tilfældet her. Lad os få strukturen klar først. Hvad er det i vil lave? Hvordan skal det virke? Hvordan skal det opdeles i klasser?
Med den holdning kommer i ikke særligt langt her på sitet !
lav følgende:
Kogebog en en klasse der indeholder en liste af opskrifter Opskrift er en klasse visses objekter indeholder en liste over ingredienser. Ingredienser er en klasse hvor et objekt er en ingrediens, f.eks. antal æg.
Sådan har vi også opbygget vores program. Har du prøvet at køre det?? Vi kan oprette en opskrift, men kun med en ingrediens. Vi vil gerne have lavet en slags løkke, så man kan gemme flere ingredienser til den samme opskrift. Det er det der er vores problem...
Jeg kan desværre ikke lige teste jeres program her, har ikke java på maskinen :(
Når i opretter en opskrift, og tilføjere en ingrediens, kan i lave en løkke der bliver ved med at spørge om flere ingredienser indtil i f.eks. indtaster en tom ingrediens.
//**** public String getIngredientName() { return ingredientName; }
//**** public double getIngredientAmount() { return ingredientAmount; }
//**** public String getIngredientType() { return ingredientType; }
//Metode som bliver brugt til at vise de oplysninger objektet indeholder. public String toString() { return ingredientAmount + " " + ingredientType + " " + ingredientName; }
//LinkedList bliver deklareret private LinkedList allIngredients;
//Constructor der instansierer en LinkedList public Recipe(String rName) { recipeName = rName; allIngredients = new LinkedList(); }
public LinkedList getRecipies() { return new LinkedList(allIngredients); }
public void addIngredient(Ingredient ingredient) { allIngredients.add(ingredient); }
//Metode der sletter en opskrift public void deleteIngredient(String ingredientName) { Iterator ingredientsIterator = allIngredients.iterator(); while (ingredientsIterator.hasNext()) { Ingredient ingredient = (Ingredient) ingredientsIterator.next(); if (ingredientName.equals(ingredient.getIngredientName())) ingredientsIterator.remove(); } }
//**** public String getRecipeName() { return recipeName; }
//Metode som bliver brugt til at vise de oplysninger objektet indeholder. public String toString() { return "Recipe Name: " + recipeName + "\n ------------\n" + " Ingredients: " + allIngredients + "\n"; }
}
import java.util.LinkedList;
public class Demo { public static void main(String[] args) { LinkedList allRecipies = new LinkedList(); Recipe r1 = new Recipe("våd kage"); r1.addIngredient(new Ingredient("mel", 1.0, "kg")); r1.addIngredient(new Ingredient("vand", 2.0, "liter")); System.out.println(r1); allRecipies.add(r1); Recipe r2 = new Recipe("tør kage"); r2.addIngredient(new Ingredient("mel", 2.0, "kg")); r2.addIngredient(new Ingredient("vand", 1.0, "liter")); System.out.println(r2); allRecipies.add(r2); } }
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.