简体   繁体   中英

Problem with toString method returning from proper class

I am having some issues with classes here. First of all, I have a Computer class that I have built that works fine with a separate "SystemBuilder" class. Everything in the class works fine. I am now building a separate class in order to store an array of objects. One of the requirements of this class is that I create an array of objects, have an add method, have a toString method, and a search method.

Well, I finished adding the toString method - and cannot get it to work quite right. While I understand the basic concept of everything that's going on here, the class relations are a bit confusing.

What seems to be happening now when I call the toString function on an object from my Object Collection Class (ComputerStore), it will call the toString method from the Computer class and print it in that format. However, I don't want that to happen to a ComputerStore object, I only want that to happen to Computer Objects.

Can someone please guide me in the way that I need to go here, and shed a little light into whats going on?

Thanks very much... Below is Computer Class first then ComputerStore class.

//This program will create Computer objects with different data members
//and will also upgrade those data members based on setters.  This program
//also has a depreciation function and upgrade function.  This (Computer) is the class
//and the SystemBuilder class is the class used for creating the objects.
public class Computer {
    // Data Members - These belong to the class and are private.
    // They all go to new objects.
    private String cpu;
    private int ram;
    private String gpu;
    private String motherboard;
    private String psu;
    private double cost;
    private int serialnumber;
    private double depreciation;

    // Initial constructor with no arguments
    Computer() {
        cpu = "";
        ram = 0;
        gpu = "";
        motherboard = "";
        psu = "";
        cost = 0.0;
        serialnumber = 0;
        depreciation = 0.0;
    }

    // Constructor with data members
    Computer(String c, int r, String g, String m, String p, double co, int sn, double d) {
        cpu = new String(c);
        ram = r;
        gpu = new String(g);
        motherboard = new String(m);
        psu = new String(p);
        cost = co;
        serialnumber = sn;
        depreciation = d;

    }

    // Getters, allow retrieval of data members from outside of class
    public String getCpu() {
        return cpu;
    }

    public int getRam() {
        return ram;
    }

    public String getGpu() {
        return gpu;
    }

    public String getMotherboard() {
        return motherboard;
    }

    public String getPsu() {
        return psu;
    }

    public double getCost() {
        return cost;
    }

    public int getSerialnumber() {
        return serialnumber;
    }

    public double getDepreciation() {
        return depreciation;
    }
    // Setters, allow setting of data members from outside of class

    public void setCpu(String c) {
        cpu = new String(c);
    }

    public void setRam(int r) {
        ram = r;
    }

    public void setGpu(String g) {
        gpu = new String(g);
    }

    public void setMotherboard(String m) {
        motherboard = new String(m);
    }

    public void setPsu(String p) {
        psu = new String(p);
    }

    public void setCost(double co) {
        cost = co;
    }

    public void setSerialnumber(int sn) {
        serialnumber = sn;
    }

    public void setDepreciation(double d) {
        depreciation = d;
    }

    // Boolean below will compare computers to see if equal
    // based on same motherboard SN#.
    public boolean equals(Computer c) {
        if (this.serialnumber == (c.serialnumber)) {
            return true;
        } else {
            return false;
        }
    }

    // To string method will print characteristics about object.


    public String toString() {
        return ("CPU:\t\t" + cpu + "\n" + "RAM:\t\t" + ram + "\n" + "GPU:\t\t" + gpu + "\n" + "Motherboard:\t"
                + motherboard + "\n" + "PSU:\t\t" + psu + "\n" + "Cost:\t\t" + "$" + cost + "\n" + "SN#:\t\t"
                + serialnumber + "\n" + "Depreciation:\t" + "$" + depreciation + " (annually)");
    }
    // A method to depreciate the cost of the computer
    // The formula is observed below, but this is a
    // straight line depreciation equation, calculated based
    // on the values the user passes into the function. This method
    // will show an output of annual depreciation based on useful
    // life, entered in "years" by the user.
    public void depreciate(double purchasePrice, double salvageValue, double lifeSpanYears) {
        double depreciableCost;
        double annualDepreciation;
        depreciableCost = purchasePrice - salvageValue;
        annualDepreciation = depreciableCost / lifeSpanYears;
        depreciation = annualDepreciation;
    }

    // A method to upgrade the ram or the video card
    // The method will accpet argumetns for ram (in int) and a gpu (string).
    public void upgrade(int newRam, String newGpu) {
        ram = newRam;
        gpu = new String(newGpu);
    }

}



public class ComputerStore {
    private Computer[] systems;
    private int sysNumbers;

    public ComputerStore() {
        systems = new Computer[200];
        sysNumbers = 0;
    }

    public void add(String c, int r, String g, String m, String p, double co, int sn, double d)
    {
        systems[sysNumbers++] = new Computer(c, r, g, m, p, co, sn, d);

    }
    public String toString() {
        String result = "";
        for (int i = 0; i < sysNumbers; i++)
            result += systems[i].toString() + "\n";
                return result;

        }
    }

A ComputerStore.toString is a text of which every line is a Computer.toString . Misleading is the indentation and the {}.

public String toString() {
    String result = "";
    for (int i = 0; i < sysNumbers; i++)
        result += systems[i].toString() + "\n";
    return result;
}

More clear as code and as result would be:

public String toString() {
    StringBuilder result = new StringBuilder("{");
    for (int i = 0; i < sysNumbers; i++) {
        if (i > 0) {
            result.append(", ");
        }
        result.append(systems[i].getSerialNumber());
    }
    result.append("}");
    return result.toString();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM