2011-12-13 87 views
0

我有一个方法对另一个类不可见,我无法弄清楚它的问题。 我有一个Shopping_Basket类,它有一个商品列表(Merchandise是一个类)。我试图让Shopping_basket类中的Merchandise列表到达Merchandise类中的getItemCost方法。但是我得到一个错误,该方法是不可见的。我无法弄清楚什么是错的:方法不可见的帮助? Java

public class Shopping_Basket { 
    private List<Merchandise> basket; 
    public List<Merchandise> getList() { 
    return basket; 
} 

    public Shopping_Basket() { 
    basket = new ArrayList<Merchandise>(); 
    } 
    public double getTotalCost() { 
    double j = 0; 
    for (int i = 0; i < this.getList().size(); i++){    
     j += basket.get(i).getItemCost(); 
    } 
    return j; 
} 

这里的商品类别:

public class Merchandise { 
private String item_name; 

private int item_cost; 

public Merchandise(String name, int cost) { 
    this.item_name = name; 
    this.item_cost = cost; 
} 
public String getItemName() { 
    return item_name; 
} 

public double getItemCost() { 
    return item_cost; 
} 

所以误差在getTotalCost()方法它说getItemCost()不可见...帮助?

+2

该方法应该是可访问的。确保做一切干净的构建。 – NPE

+1

请发布堆栈跟踪。 – Paul

+2

这不是问题的原因,但是在'Merchandise'中,你将'item_cost'声明为'int',然后从返回类型为'double'的方法返回它。 – Paul

回答

2

你的代码是正确的,居然编译并执行罚款。见下文,如果你做的一切权利交叉检查(我刚才为了增添了main()方法来执行你的代码):

$ cat > Merchandise.java 
public class Merchandise { 

     private String item_name; 

     private int item_cost; 

     public Merchandise(String name, int cost) { 
       this.item_name = name; 
       this.item_cost = cost; 
     } 

     public String getItemName() { 
       return item_name; 
     } 

     public double getItemCost() { 
       return item_cost; 
     } 
} 

$ cat > Shopping_Basket.java 
import java.util.ArrayList; 
import java.util.List; 

public class Shopping_Basket { 

     private List<Merchandise> basket; 

     public List<Merchandise> getList() { 
       return basket; 
     } 

     public Shopping_Basket() { 
       basket = new ArrayList<Merchandise>(); 
     } 

     public double getTotalCost() { 
       double j = 0; 
       for (int i = 0; i < this.getList().size(); i++) { 
         j += basket.get(i).getItemCost(); 
       } 
       return j; 
     } 

     public static void main(String[] args) { 
       Shopping_Basket sb = new Shopping_Basket(); 
       System.out.println(sb.getTotalCost()); 

     } 

} 

$ javac Shopping_Basket.java 

$ java Shopping_Basket 
0.0 

所以,正如我说的,正如你所看到的,该代码是好的。对于编译器,这至少是因为有几件事情要指出:

  • Merchandiseitem_costint,但getItemCost()返回类Shopping_Basketdouble
  • 名称应修改的东西像ShoppingBasket
+0

这是double和int的问题!多谢你们 – QuackMan245

1

我没有看到任何错误,这段代码应该编译并在我的计算机上实际编译。 请尝试清理您的IDE中的项目,然后再次编译整个项目。

+3

这实在比评论还要多。 – Paul

0

这些类是正确的。该方法是公开的,因此它是可见的。 也许是设置类路径或导入类的问题。

public class Merchandise { 
private String item_name; 

private int item_cost; 

public Merchandise(String name, int cost) { 
    this.item_name = name; 
    this.item_cost = cost; 
} 

public String getItemName() { 
    return item_name; 
} 

public double getItemCost() { 
    return item_cost; 
} 

}

import java.util.ArrayList; 

进口的java.util.List;

public class Shopping_Basket { private List basket;

public List<Merchandise> getList() { 
    return basket; 
} 

public Shopping_Basket() { 
basket = new ArrayList<Merchandise>(); 

}

public double getTotalCost() { 
    double j = 0; 
    for (int i = 0; i < this.getList().size(); i++) { 
     j += basket.get(i).getItemCost(); 
    } 
    return j; 
} 

public void addMerchandise(Merchandise m){ 
    basket.add(m); 
} 

public static void main(String[] args) { 
    Merchandise m1 = new Merchandise("prova", 11); 
    Merchandise m2 = new Merchandise("prova2", 13); 

    Shopping_Basket sb = new Shopping_Basket(); 

    sb.addMerchandise(m1); 
    sb.addMerchandise(m2); 

    System.out.println(sb.getTotalCost()); 
} 

}