necesito ayuda

Iniciado por Zuzi, 27 Junio 2010, 07:27 AM

0 Miembros y 2 Visitantes están viendo este tema.

Zuzi

soy nueva en java y estoy haciendo una tarea q me esta dando un error a la hora de imprimir, la verdad es q no se ya q voy a hacer ,no puedo usar arreglos ni nada,  :-(
aqui les dejo mi codigo,

yo debo imprimir esto
Bread............  2.99
Chicken..........6.79
Egg..................3.07
______________
Total ..........$12.85

The number of items purchased is 3 items
The average price per item is $4.28

Amount tendered is $20.00
The change is $7.15

The change includes
7 dollars
0 quarters
1 dimes
1 nickels
0 cents

pero cuando compilo lo q hice pues me sale breadchickenEgg....12.85, y no en separado (esos datos los entra el usuario y son tres nada mas)algo anda mal y no he dado todavia con lo q es, aqui les dejo las tres clases q estoy haciendo..


la clase Cashier

/**
*
* @author Zuzi
*/
public class Cashier {

    private String name;
    private double price;
    private int numberOfItem;
    private double tendered;
    private double amount;
    private double change;
    private double average;
    private  int totalOfItem;
    private int num;
   
    private int dollars,quarters,dimes,nickles,cents;
   
   
    private static double totalSumOfAllItems; //sum of all prices of each item
   



    public Cashier()
    {
     name="";
     price=0.0;
     amount=0.0;
     change=0.0;
     average=0.0;
     numberOfItem=0;
     num=0;
    }

    public Cashier(String name,double price)
    {
    this();
    this.name=name;
    this.price=price;

    }

    public void add(String name,double price)
    {
       
       String a=name;
       this.name=a;
       

       double p=this.price+price;
       this.price=p;
       totalOfItem++;
       totalSumOfAllItems=totalSumOfAllItems+price;
    }

    public void  average()
    {
       average=(totalSumOfAllItems/numberOfItem);
     
    }

    public static double totalPrice()
    {
     return totalSumOfAllItems;
    }

    public int getTotalOfItem()
    {
    return totalOfItem;

    }

    public double tendered(double amount)
    {
       tendered=amount;
        return tendered;
    }

    public void makeChange()
    {
     
     //change = tendered - totalSumOfAllItems;
     //change = 100 * change;
     //change = Math.round(change);
     //change = change / 100;
        change=tendered-totalSumOfAllItems;
     dollars = (int)(tendered - totalSumOfAllItems) * 100 / 100;
     cents = (int)(change * 100) % 100;
     quarters = (int)cents / 25;
     cents  = (int)cents % 25;
     dimes = (int)cents / 10;
     cents = (int)cents % 10;
     nickles = (int)cents / 5;
     cents = (int)cents % 5;
     cents = (int)cents;
    }

    public double getChange()
    {
      return change;
    }

   public double getAmount()
   {
      return amount;
   }

   public double getPrice()
   {
      return price;
   }

   public double getTendered()
   {
       return tendered;

   }

   public String getName()
   {
       return name;
   }

   public double getAverage()
   {
       return average;
   }

   public int getDollars()
   {
      return dollars;
   }
   
   public int getQuarters()
   {
       return quarters;
   }

   public int getDimes()
   {
           return dimes;
   }
   public int getNickels()
   {
           return nickles;
   }
   public int getCents()
   {
           return cents;
   }


la clase testCashier para imprimir todo

public class TestCashier {

    public static void main(String[] arg)
   {
           Cashier c = new Cashier();
           
                   
    String name = GetData.getWord("Enter name of item");
    double price = GetData.getDouble("Enter price of item");
    c.add(name, price);

    name = GetData.getWord("Enter name of item");
    price = GetData.getDouble("Enter price of item");
    c.add(name, price);
   // Add a few more entries of your own

    name = GetData.getWord("Enter name of item");
    price = GetData.getDouble("Enter price of item");
    c.add(name, price);
         
         // Now average the price of the items
              c.average();

// Make payment
  double amount = GetData.getDouble("Enter amount of money for payment");

        c.tendered(amount); // Twenty dollars were tendered
   c.makeChange();
        generateReceipt(c);


   }
       static void generateReceipt(Cashier c)
       {
           // Write the necessary code that will generate a customer's receipt.
           // The output must be displayed in a scrollable pane
           
            Date d = new Date();
            DateFormat df = DateFormat.getDateInstance();
            NumberFormat f = NumberFormat.getCurrencyInstance();
   
         String receipt= "Sears Inc"+"\n";
                       receipt=receipt+"Welcome – thanks for stopping, \n";
                       receipt = receipt + "Date :" + df.format(d) + "\n";

                             
                receipt=receipt+ c.getName()+"......."+ f.format(c.getPrice())+"\n"
                               + c.getName()+"......."+ f.format(c.getPrice())+"\n"
                               + c.getName()+"......."+ f.format(c.getPrice())+"\n";
                       receipt=receipt+"_____________________"+"\n";
                       receipt=receipt+"Total.........."+f.format(c.totalPrice())+"\n";

                       receipt = receipt + "The number of items purchased is: " + c.getTotalOfItem() + " items" + "\n";
                  receipt = receipt + "The average price per item is: " + f.format(c.getAverage()) +  "\n";
                  receipt = receipt + "Amount tendered is: " + c.getTendered() + "\n";
                  receipt = receipt + "The change is :"+c.getChange() + "\n";
                       receipt = receipt + "The change include :" + "\n";
                  receipt = receipt + c.getDollars() + " dollars" + "\n" + c.getQuarters()+ " quarters" + "\n" + c.getDimes()+ " dimes" + "\n" + c.getNickels()+ " nickels" + "\n" + c.getCents() + " cents";
         
         JTextArea text=new JTextArea(receipt,20,40);//rows and columns
         JScrollPane s=new JScrollPane(text);


       JOptionPane.showMessageDialog(null, s,"Sears Inc",JOptionPane.INFORMATION_MESSAGE);



    }


y la clase GetData

import javax.swing.JOptionPane;

/**
*
* @author zuzi
*/
public class GetData {


static int getInt(String s)
{

    return Integer.parseInt(getWord(s));
}

static double getDouble(String s)
{
return Double.parseDouble(getWord(s));
}

static String getWord (String s)
{
return JOptionPane.showInputDialog(s);

}
//Write appropriate methods to return the remaining numeric types

       static short getShort(String s)
            {
                  return Short.parseShort(getWord(s));
            }

    static byte getByte(String s)
{
return Byte.parseByte(getWord(s));
}


     static float getFloat(String s)
{
return Float.parseFloat(getWord(s));
}

    static long getLong(String s)
{
return Long.parseLong(getWord(s));
}

    static char getChar(String s)
{
    return getWord(s).charAt(0);
}




}


gracias a todos
   


Debci

Si pudieses adjuntar el error que te da, y poner el codigo entre quotes geshi para codigo java, te podria ayudar practicamente en el acto.

Lo siento pero no puedo dar palos de ciego, donde te da el error? Que te reporta el tracer de java?

Saludos

Zuzi

ese es el problema  qno me da errores lo q pasa es q no hace lo q tiene q hacer, tengo q sacar esto

Bread............  2.99
Chicken..........6.79
Egg..................3.07
______________
Total ..........$12.85

y cuando lo compilo me da esto

breadChickenEgg....12.85 , es decir lo q hace es sumar todo hasta los String supongo q sera un error en algun metodo, seguro en el add pero no hay forma lo he cambiado muchas veces y nada  :-(

Debci

#3
Cita de: Zuzi en 27 Junio 2010, 15:29 PM
ese es el problema  qno me da errores lo q pasa es q no hace lo q tiene q hacer, tengo q sacar esto

Bread............  2.99
Chicken..........6.79
Egg..................3.07
______________
Total ..........$12.85

y cuando lo compilo me da esto

breadChickenEgg....12.85 , es decir lo q hace es sumar todo hasta los String supongo q sera un error en algun metodo, seguro en el add pero no hay forma lo he cambiado muchas veces y nada  :-(
Porque tienes que muestrear los datos de forma separada, osea suponiendo que los precios se guardan en 3 variables consecutivas de tipo Int:
Código (java) [Seleccionar]

//Sin decimales para ir mas rapido
int precio1 = 3;
int precio2 = 6;
int precio3 = 4;
//Nombres de los productos
String producto1 = "Bread";
String producto2 = "Chicken";
String producto3 = "Egg";


Ahora toca procesar datos y muestrearlos:

Código (java) [Seleccionar]

System.out.println(producto1 + "...................." + precio1);
System.out.println(producto2 + "...................." + precio2);
System.out.println(producto3 + "...................." + precio3);
System.out.println("____________________________");
System.out.println("Total................................$" + (precio1+precio2+precio3));


No lo he hecho mas dinamico, con datos ams organizados en otro tipo de estructuras mas idoneas, por dos motivos:
1-No se si conoces dichas estructuras como lo son Arrays.
2-Para que comprendas el porque, y veas claro, por supuesto seria un metodo muy limitado, a tan solo 3 elementos, pero puedes hacerlo mas dinamico con bucles y tal.

Y por ultimo comentarte que aunque la string contenga un grafo numerico, sigue siendo string:

Código (java) [Seleccionar]

String numero = "1";
String otroNumero = new String("4");
System.out.println(numero+otroNumero);


Y obtendriamos como resultado:

Citar
14
Y no 15 como en teoria se pretende, para hacer la suma aritmetica de valores, se hace con datos tipo INT:

Código (java) [Seleccionar]

int numero = 1;
int otroNumero = 4;
System.out.println(numero+otroNumero);


Y obtendriamos:
Citar5
Como deberia ser!

Comentarte tambien que si quieres separar cadenas, puedes hacer como bien te he indicado varios println, o puedes hacer uno solo o un simple print, y despues de cada linea poner el caracter \n, para saltar a la linea de abajo.


Insisto en que deberias poner las etiquetas Geshi de codigo java o yo personalmente no voy a mirarlo, porque cuesta orientarse, distinguir las clases de los datos....

Saludos

Zuzi

graciass de verdad q me sirvio de gran ayuda, lo q pasa es q los names y los precios los entra en usuario y en el metodo add los adiciono asi q por eso supongo q sea por ahi sea el problema

public void add(String name,double price) // aqui es donde el usuario pone el nombre y el precio
    {
       
      this.name+=name;  // y suspuestamente debo agregar los tres sin unirlos o sobreescribirlos q es lo q me pasa  :-\ , aqui tambien cuento la cantidad total de productos q se hace bien y ademas sumar la cantidad total de dinero q se hace bien tambien..

       

       double p=this.price+price;
       this.price=p;
       totalOfItem++;
       totalSumOfAllItems=totalSumOfAllItems+price;
    }



no hemos dado los arrays por eso es q mi profe dijo q no los usaramos supongo q sera mucho mas facil con arrays y mas dinamico pero el no quiere q se usen, es estatico para 3 productos con sus precios

y finalmente en el output esto es lo q tengo

String name = GetData.getWord("Enter name of item");
    double price = GetData.getDouble("Enter price of item");
    c.add(name, price);

esto lo repito tres veces pq son tres veces q el usuario entra el name y el price, ves como se llama el metodo add al final?

aqui ya lo saco ..el getName me devuelve el name y el getPrice el precio, pero como no funciona lo de arriba pues esto se marea jeejej...

String receipt=receipt+ c.getName()+"......."+ f.format(c.getPrice())+"\n"
                               + c.getName()+"......."+ f.format(c.getPrice())+"\n"
                               + c.getName()+"......."+ f.format(c.getPrice())+"\n";
                       receipt=receipt+"_____________________"+"\n";
                       receipt=receipt+"Total.........."+f.format(c.totalPrice())+"\n";

gracias por tu ayuda, y gracias por los consejos  es q primera vez q entro a un foro de estos ......THANKSS

Debci

Ya veo, pero opino que te complicas mucho a la hora de muestrear los datos, creo que deberias usar alguna llamada a funcion sin cargarlo tanto, hazlo de paso en paso con system.out.println();
Ten en cuenta que cada println supone una linea nueva, por lo que te olvidas de saltos de linea y no tienes tantos problemas, porque viendo el codigo, es mucho mas estatico de lo que pensaba, siempre son 5 lineas, pues 5 println.

Mucho mas ordenado y sencillo.

Agradeceria que editaras lo mensajes y añadieses las quotes:


[code=java]aqui dentro tu codigo, con saltos de linea si queires, y quedara mucho mas ordenado y coloreado para que podamos atenderte bien.

[/code]

Saludos

PD: Bienvenid@ al foro

Zuzi

con system.out.println no puedo pq debe salir en un scrollable pane  :rolleyes:

gracias

Debci

Cita de: Zuzi en 27 Junio 2010, 17:19 PM
con system.out.println no puedo pq debe salir en un scrollable pane  :rolleyes:

gracias
Aaaa cierto no contaba con el swing error mio, buscaré un metodo para el salto de linea...

aa
Ya recuerdo se hacia con append(); y antes de este un salto de linea.

Saludos