Avatar billede louise&patricia Nybegynder
07. maj 2003 - 11:54 Der 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);
}


******Ingredient KLASSEN******
public Ingredient(String iName, double iAmount, String iType){
  ingredientName = iName;
  ingredientAmount = iAmount;
  ingredientType = iType;               
    }
Avatar billede jakoba Nybegynder
07. maj 2003 - 12:02 #1
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.

mvh JakobA
Avatar billede louise&patricia Nybegynder
07. maj 2003 - 12:06 #2
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??

Eller skal vi maile det til dig??
Avatar billede disky Nybegynder
07. maj 2003 - 12:13 #3
Ingredienser er en linket liste inden i jeres opskrift.

Så skal i have en addIngrediens() metode som tilføjer en ingrediens til opskriften.

Hver opskrift kan så igen ligge i en linket liste som så er en kogebog.

p.s. i må ikke løse opgaven uden for eksperten, da det så er ulovlig point overførsel, så kør det hele på eksperten.
Avatar billede louise&patricia Nybegynder
07. maj 2003 - 12:18 #4
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();   
    }
}

-------------------------------------------------------------------------------

import corejava.Console;
import java.util.LinkedList;
import java.util.Iterator;
import java.util.HashMap;
import java.util.Vector;



public class UserInterface{
   
    private Kitchen kitchen;
    private Recipe recipe;
   
    private static final String clear=  "\033c";
   
    //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++;
            }
           
        Integer selection = new Integer(this.ingredientNumber());
        String ingredientID = ((Ingredient)identifiers.get(selection)).getIngredientName();
        kitchen.deleteIngredient(ingredientID);
    }

    //****
    public void addRecipe(){
        recipe.addRecipe(new Recipe (this.recipeName(), new Ingredient(this.ingredientName(), this.ingredientAmount(), this.ingredientType()), this.recipeText()));
    }
   
    //****
    public void deleteRecipies(){
        Iterator recipiesIterator = recipe.getRecipies().iterator();
        HashMap identifiers = new HashMap();
       
        int counter=1;
        while (recipiesIterator.hasNext()){
            Recipe recipe = (Recipe)recipiesIterator.next();
            identifiers.put(new Integer(counter), recipe);
            System.out.println(counter + " : " + recipe);
            counter++;
            }
           
        Integer selection = new Integer(this.recipeNumber());
        String recipeID = ((Recipe)identifiers.get(selection)).getRecipeName();
        recipe.deleteRecipe(recipeID);
   
   
    }
}

-------------------------------------------------------------------------------

/*
* 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
    */

  public static void printPrompt(String prompt)
  {  System.out.print(prompt + " ");
      System.out.flush();
  }
 
  /**
    * 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
    */
   
  public static double readDouble(String prompt)
  {  while(true)
      {  printPrompt(prompt);
        try
        {  return Double.valueOf
              (readString().trim()).doubleValue();
        } catch(NumberFormatException e)
        {  System.out.println
        ("Not a floating point number. Please try again!");
        }
      }
  }
}

-------------------------------------------------------------------------------

import java.util.LinkedList;
import java.util.Iterator;
import java.io.*;

public class Recipe{
   
    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();
        }
    }
   
    /*public void addIngredient(Ingredient ingredient){
    allIngredients.add(ingredient);   
    }*/
   
    //****
    public String getRecipeName(){
    return recipeName;
    }

    //****
    public String getRecipeText(){
    return recipeText;
    }

    //Metode som bliver brugt til at vise de oplysninger objektet indeholder.
    public String toString(){
        return "Recipe Name: " + recipeName + "\n    ------------\n" + "    Ingredients: " + ingredient + "\n    ------------\n" + "    Recipe Text: " + recipeText + "\n";
    }


}

-------------------------------------------------------------------------------

import java.util.LinkedList;
import java.util.Iterator;
import java.io.*;

public class Kitchen{
   
    //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();
        }
    }
   
}

-------------------------------------------------------------------------------

//import java.util.*;
//import java.io.*;

public class Ingredient /*implements Comparable*/{
   
    //Navnet på ingrediensen
    private String ingredientName;
   
    //Mængden af ingrediensen
    private double ingredientAmount;
   
    //Mængden af ingrediensen
    private String ingredientType;

    //****
    public Ingredient(String iName, double iAmount, String iType){
    ingredientName = iName;
    ingredientAmount = iAmount;
    ingredientType = iType;               
    }
   
    //****
    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;
    }

}

-------------------------------------------------------------------------------
Avatar billede jakoba Nybegynder
07. maj 2003 - 12:18 #5
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?

indtil det er på plads er kode et fy-ord.

mvh JakobA
Avatar billede disky Nybegynder
07. maj 2003 - 12:44 #6
jakoba:
Det er din personlige holdning.
Avatar billede jakoba Nybegynder
07. maj 2003 - 12:52 #7
Ja det er det :-)
Avatar billede louise&patricia Nybegynder
07. maj 2003 - 12:57 #8
Vil i hjælpe os, eller blive ved med at skændes som kællinger??? Ellers lukker vi spørgsmålet igen...
Avatar billede disky Nybegynder
07. maj 2003 - 13:00 #9
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.

Mere skal der ikke til.

Hvad er det helt specifikt jeres problem er ?
Avatar billede louise&patricia Nybegynder
07. maj 2003 - 13:03 #10
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...

Undskyld...½
Avatar billede disky Nybegynder
07. maj 2003 - 13:11 #11
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.
Avatar billede arne_v Ekspert
07. maj 2003 - 13:12 #12
Ikke helt.

I har:

public class Recipe{
    ...
    Ingredient ingredient;
    ...
    private LinkedList allRecipies;
   
Et objekt af type Recipe skal ikke indeholde en liste over
alle opskrifter. Den skal indehodle ne liste af ingerdienser.

Derfor:

public class Recipe{
    ...
    private LinkedList allIngredients;
Avatar billede arne_v Ekspert
07. maj 2003 - 13:37 #13
Og så genaktivere den her:

    public void addIngredient(Ingredient ingredient){
        allIngredients.add(ingredient);   
    }
Avatar billede arne_v Ekspert
07. maj 2003 - 17:28 #14
Jeg har arbejdet lidt videre med den.

Her er nogle rettede klasser og et lille bitte demo program.

public class Ingredient /*implements Comparable*/ {

    //Navnet på ingrediensen
    private String ingredientName;

    //Mængden af ingrediensen
    private double ingredientAmount;

    //Mængden af ingrediensen
    private String ingredientType;

    //****
    public Ingredient(String iName, double iAmount, String iType) {
        ingredientName = iName;
        ingredientAmount = iAmount;
        ingredientType = iType;
    }

    //****
    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;
    }

}

import java.util.LinkedList;
import java.util.Iterator;

public class Recipe {

    private String recipeName;

    //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);
    }
}
Avatar billede arne_v Ekspert
07. maj 2003 - 17:30 #15
Jeres UserInterface skal så rettes til så den laver noget tilsvarende Demo.

NB: Jeg vil fraråde brug af de opskrifter fra mit demo program. :-)
Avatar billede arne_v Ekspert
10. maj 2003 - 00:20 #16
louise & patricia>

Er I kommet videre ?
Avatar billede louise&patricia Nybegynder
21. maj 2003 - 09:42 #17
Tak for hjælpen...
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester