jrsk8chivas
jrsk8chivas

Reputation: 43

Displaying error on toString method

I am working on this code where a menu pops up and you enter a choice to enter a computer or to display the computers added. However the only problem i have is when it displays it give me a null for the type of cpu and its speed. It is suppose to display like this

\nBrandName:\tDell\n CPU:\t\tpentium3,500HZ\n Memory:\t\t398M\n Price:\t\t$1,390.00\n\n

but it displays like this

\nBrandName:\tDell\n CPU:\t\tnullHZ\n Memory:\t\t398M\n Price:\t\t$1,390.00\n\n

here is my code there are three classes a main Assignment4 class a CPU class and a computer class, I believe my error is somewhere in my computer class.

here is my Assignment4 class

  // Description: Assignment 4 class displays a menu of choices to a user
 //        and performs the chosen task. It will keep asking a user to
//        enter the next choice until the choice of 'Q' (Quit) is entered.

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

public class Assignment4
{
public static void main (String[] args)
{
    // local variables, can be accessed anywhere from the main method
   char input1 = 'Z';
   String inputInfo;
   String brandName;
   double price;
   int memory;
   String cpuType;
   int cpuSpeed;
   String line = new String();

   // instantiate a Computer object
   Computer computer1 = new Computer();

   printMenu();

   //Create a Scanner object to read user input
   Scanner scan = new Scanner(System.in);


   do  // will ask for user input
    {
     System.out.println("What action would you like to perform?");
     line = scan.nextLine();

     if (line.length() == 1)
      {
       input1 = line.charAt(0);
       input1 = Character.toUpperCase(input1);

       // matches one of the case statement
       switch (input1)
        {
         case 'A':   //Add Computer
           System.out.print("Please enter the computer information:\n");
           System.out.print("Enter a brand name:\n");
           brandName = scan.nextLine();
           computer1.setBrandName(brandName);

           System.out.print("Enter a computer price:\n");
           price = Double.parseDouble(scan.nextLine());
           computer1.setPrice(price);

           System.out.print("Enter a computer memory:\n");
           memory = Integer.parseInt(scan.nextLine());
           computer1.setMemory(memory);

           System.out.print("Enter a cpu type:\n");
           cpuType = scan.nextLine();
           System.out.print("Enter a cpu speed:\n");
           cpuSpeed = Integer.parseInt(scan.nextLine());
           computer1.setCPU(cpuType, cpuSpeed);
           break;
         case 'D':   //Display computer
           System.out.print(computer1);
           break;
         case 'Q':   //Quit
           break;
         case '?':   //Display Menu
           printMenu();
           break;
         default:
           System.out.print("Unknown action\n");
           break;
        }
      }
     else
      {
       System.out.print("Unknown action\n");
      }
    } while (input1 != 'Q' || line.length() != 1);
   }


  /** The method printMenu displays the menu to a user**/
      public static void printMenu()
    {
       System.out.print("Choice\t\tAction\n" +
                    "------\t\t------\n" +
                    "A\t\tAdd Computer\n" +
                    "D\t\tDisplay Computer\n" +
                    "Q\t\tQuit\n" +
                    "?\t\tDisplay Help\n\n");
       }
   }

here is my CPU class

   public class CPU
   {

     private String type = "?";
        private int speed= 0;;

    public CPU(String type, int speed)
     {
           this.type = type;
          this.speed = speed;
       }

       public String getType()
      {
          return type;
       }

      public int getSpeed()
    {
       return speed;
     }

   public void setType(String type)
  {
       this.type = type;
   }

   public void setSpeed(int speed)
   {
       this.speed = speed;
    }

    public String toString()
    {
       String result = this.type + "," + this.speed + "HZ";

       return result;
     }

      }

and finally my Computer class

       public class Computer
     {
         private String brandName;
            private int memory;
            private double price;
            CPU Cpu;


      public Computer()
      {
           brandName = "?";
           memory = 0;
           price = 0.0;
           CPU Cpu = new CPU("?", 0);
      }

        public String getBrandName()
       {
           return brandName;
      }

      public CPU getCPU()
        {
        return Cpu;
       }


     public int getMemory()
      {
            return memory;
      }

        public double getPrice()
     {
            return price;
       }

      public void setBrandName(String BrandName)
      {
          brandName = BrandName;
       }

        public void setCPU(String cpuType, int cpuSpeed)
      {

             CPU cpu = new CPU(cpuType, cpuSpeed);

      }

     public void setMemory(int memoryAmount)
      {
        memory = memoryAmount;
       }

       public void setPrice(double price)
     { 
        this.price = price;
      }

      public String toString()
        {
          String output = "\n"+"BrandName:"+"\t"+brandName+"\n"+
                    "CPU:\t\t"+Cpu+"HZ\n"+
                    "Memory:\t\t"+memory+"M\n"+
                    "Price:\t\t"+"$"+price+"\n\n";
          return output;
       }

   }

Upvotes: 0

Views: 97

Answers (2)

user2575725
user2575725

Reputation:

You have make changes here:

Computer constructor:

CPU Cpu = new CPU("?", 0); `to` Cpu = new CPU("?", 0);

Computer's setCPU(String cpuType, int cpuSpeed)

CPU cpu = new CPU(cpuType, cpuSpeed); `to`

Cpu.setType(cpuType);
Cpu.setSpeed(cpuSpeed);

Upvotes: 0

jackarms
jackarms

Reputation: 1333

You create a new CPU variable in the method setCPU, which gets destroyed when the method ends. It should instead change the instance variable Cpu, so that the information is retained.

Upvotes: 1

Related Questions