2016-10-25 3 views
0

Я получаю сообщение об ошибке, не статическую переменную, на которую нельзя ссылаться из статического контекста parts[0] = new Part("Nut", 12, 0.05); Как бы реализовать перегруженные конструкторы с помощью «этих» вызовов.Реализовать перегруженные конструкторы с помощью «этих» вызовов

Part[] parts = new Part[5]; 

    parts[0] = new Part("Nut", 12, 0.05); 
    parts[1] = new Part("Bolt", 15, 0.07); 
    // default name "Unknown" 
    parts[2] = new Part(); 
    // default quantity -1 
    parts[3] = new Part("Screw"); 
    // default price .01 
    parts[4] = new Part("Grommet", 4); 

    System.out.println("\nPARTS LIST"); 
    for(Part p : parts) 
    { 
    System.out.println(p.getDescription() + ", " + p.getQuantity() 
     + ", " + p.getCost()); 
    } 

    parts[0].setDescription("Hex nut"); 
    parts[1].setQuantity(30); 
    parts[2].setCost(0.19); 
    parts[3].setDescription("Rubber grommet"); 
    parts[4].setQuantity(40); 

    System.out.println("\nPARTS LIST AFTER CHANGES"); 
    for(Part p : parts) 
    { 
    // Uses the toString method! 
    System.out.println(p); 
    } 
    } 

class Part 
{ 
private String partDesc; 
private int quantity;   // parts quantity 
private double cost;   // parts cost 

public Part(String d, int q, double c) // Constructor for Part 
{ 
    partDesc = d; 
    quantity = q; 
    cost = c; 
} 

public Part(String partDesc, double cost) 
{ 
    this("Unknown", -1, cost); 
} 

public Part(String partDesc) 
{ 
    this(partDesc, -1, .01); 
} 

public Part(String PartDesc, int quantity) 
{ 
    this(partDesc, quantity, 0.1); 
} 

public String getDescription() // getter for parts description 
{ 
    return partDesc; 
} 

public int getQuantity()  // getter for parts quantity 
{ 
    return quantity; 
} 
public double getCost()   // getter for parts cost 
{ 
    return cost; 
} 

public String setDescription(String d) //setter for parts description 
{ 
    partDesc = d; 
    return partDesc; 
} 
public int setQuantity(int newQuantity)   //setter for parts quantity 
{ 
    quantity = newQuantity; 
} 
public double setCost(double newCost)     //setter for parts cost 
{ 
    cost = newCost; 
} 
public String toString() 
{ 
    return partDesc + " , " + quantity + " , " + cost; 
} 
} 
+0

Какая строка кода показывает вашу ошибку? – Eran

+0

_what является целью иметь объекты, сконфигурированные неполными или с недопустимыми значениями? _ Несколько конструкторов, как правило, облегчают жизнь программе, избегая необходимости определять значения, которые на данный момент не отображаются. Но в реальности они делают нашу жизнь сложнее, потому что мы не можем полагаться на объекты beeig, настроенные правильно и лаконично, поэтому нам нужно распространять проверки целостности всей программы. Пожалуйста, упростите нашу жизнь, предоставив несколько конструкторов, только если у вас есть веская причина для них, кроме удобства. –

ответ

0

Вы совершили много ошибок. Я это исправил. Конструктор по умолчанию не определен. Потому что здесь создается объект с конструктором по умолчанию. В некотором методе не добавляется оператор return.

Я добавил здесь комментарии.

См: http://beginnersbook.com/2013/05/constructor-overloading/

public class Part { 

private String partDesc; 
private int quantity; // parts quantity 
private double cost; // parts cost 

//Define default constructor. Because You have created object with this. 
public Part() // Constructor for Part 
{ 

} 

public Part(String d, int q, double c) // Constructor for Part 
{ 
    partDesc = d; 
    quantity = q; 
    cost = c; 
} 

public Part(String partDesc, double cost) 
{ 
    this("Unknown", -1, cost); 
} 

public Part(String partDesc) 
{ 
    this(partDesc, -1, .01); 
} 

public Part(String partDesc, int quantity)//Here p should be simple.unless show error 
{ 
    this(partDesc, quantity, 0.1); 
} 



public String getDescription() // getter for parts description 
{ 
    return partDesc; 
} 

public int getQuantity()  // getter for parts quantity 
{ 
    return quantity; 
} 
public double getCost()   // getter for parts cost 
{ 
    return cost; 
} 

public String setDescription(String d) //setter for parts description 
{ 
    partDesc = d; 
    return partDesc; 
} 
public int setQuantity(int newQuantity)   //setter for parts quantity 
{ 
    quantity = newQuantity; 
    return quantity;//Here return value 
} 
public double setCost(double newCost)     //setter for parts cost 
{ 
    cost = newCost; 
    return cost;//Here return value 
} 
public String toString() 
{ 
    return partDesc + " , " + quantity + " , " + cost; 
} 





     Part[] parts = new Part[5]; 

     parts[0] = new Part("Nut", 12, 0.05); 
     parts[1] = new Part("Bolt", 15, 0.07); 
     // default name "Unknown" 
     parts[2] = new Part(); 
     // default quantity -1 
     parts[3] = new Part("Screw"); 
     // default price .01 
     parts[4] = new Part("Grommet", 4); 

     System.out.println("\nPARTS LIST"); 
     for(Part p : parts) 
     { 
     System.out.println(p.getDescription() + ", " + p.getQuantity() 
      + ", " + p.getCost()); 
     } 

     parts[0].setDescription("Hex nut"); 
     parts[1].setQuantity(30); 
     parts[2].setCost(0.19); 
     parts[3].setDescription("Rubber grommet"); 
     parts[4].setQuantity(40); 


     System.out.println("\nPARTS LIST AFTER CHANGES"); 
     for(Part p : parts) 
     { 
     // Uses the toString method! 
     System.out.println(p); 
     } 
+0

Проверьте, что это код, который вы хотите –

+0

Может быть, какое-то объяснение о том, что вы сделали? – biziclop

+0

Готовые пояснения –

0

Прежде всего, если вам требуется аргумент, вы должны использовать его, так что, вместо

public Part(String partDesc, double cost) { 
    this("Unknown", -1, cost); 
} 

вы должны:

public Part(String partDesc, double cost) { 
    this(partDesc, -1, cost); 
} 

Аргумент "Unknown" следует использовать в случаях, когда вы фактически не даете partDesc , как конструктор по умолчанию.

И приветливый совет: все части имеют стоимость, поэтому вы всегда должны спрашивать цену. Но если настаивать на создании перегруженного конструктора без cost, вы можете просто поставить его на 0.0d.

Таким образом, вы могли бы что-то вроде этого:

class Part { 

    private String partDesc; 
    private int quantity;   // parts quantity 
    private double cost;   // parts cost 

    public Part() { //Default constructor 
     this("Unknown", 1, 0.0d); 
    } 

    public Part(String d, int q, double c) // Constructor for Part 
    { 
     partDesc = d; 
     quantity = q; 
     cost = c; 
    } 

    public Part(String partDesc, double cost) { 
     this(partDesc, , 1, cost); 
    } 

    public Part(String partDesc) { 
     this(partDesc, 1, 0.0d); 
    } 

    public Part(String PartDesc, int quantity) { 
     this(partDesc, quantity, 0.0d); 
    } 

    //Rest of the class... 

} 

Я надеюсь, что я помог.

Имейте славный день. :)

Смежные вопросы