更改arraylist中对象的值

时间:2015-04-08 23:18:20

标签: java arraylist set

我发现这有效:)

我找到了让它发挥作用的方法。而不是:

for(int i=0; i<alla.size(); i++){
    if(alla.get(i).getClass().getName().equals("Aktie")){
        alla.get(i).setKurs(0.0);
    }        
}

我让这个工作:

for(Värdesak v : alla){
    if(v instanceof Aktie){
        ((Aktie)v).setKurs(0.0);
    }
}

我无法弄清楚这个错误是什么。我有一个不同对象的arraylist,我的程序中有一个按钮叫做#34;股市崩盘&#34;这应该将我的arraylists中的所有现有股票套餐(不知道我在这里寻找什么词)设置为0.0。不应该像这样 alla.get(i).setKurs(0.0); 当我在我的arraylist中找到一个股票对象时,如果股票类(它是一个子类) )有一个 public void setKurs(double kurs){this.kurs = kurs; }

我会在这里发布我的代码:

这是我的按钮

class börsLyssna implements ActionListener{
    public void actionPerformed(ActionEvent ave){
        for(int i=0; i<alla.size(); i++){
            if(alla.get(i).getClass().getName().equals("Aktie")){
                alla.get(i).setKurs(0.0);
            }
        }
    }
}

__

abstract class Värdesak{
private String namn;


protected Värdesak(String namn){
    this.namn = namn;

}

public String getNamn(){
    return namn;
}


abstract public double  getVärde();

public String toString(){
    return namn + ", "+ "värde: "+(getVärde()*1.25);
}
}

class Aktie extends Värdesak{
private int antal;
private double kurs;

public Aktie(String namn, int antal, double kurs){
    super(namn);
    this.antal = antal;
    this.kurs = kurs;
}

public double getVärde(){
    return (antal*kurs);
}



public String toString(){
    return super.toString()+", antal: "+antal+" med en kurs på: "+kurs;
}

public void setKurs(double kurs) {
    this.kurs = kurs;
}

public double getKurs() {
    return kurs;
}

}

3 个答案:

答案 0 :(得分:0)

我相信(Class).getName()方法返回完全限定的类名(包括包)。

例如,从JDK 1.8文档中,getName()注释包含此示例:

 String.class.getName()
     returns "java.lang.String"

您正在测试没有包层次结构前言的类名称。

答案 1 :(得分:0)

而不是

alla.get(i).getClass().getName().equals("Aktie")

alla.get(i) instanceof Aktie

alla.get(i).getClass().getName()将返回该类的包和名称,例如java.lang.String而非String

答案 2 :(得分:0)

由于您没有告诉我们alla是如何填充的,因此无法确定是否有任何Aktie。有很多建议的方法来解决这个问题。这里有一些调试代码可以让你清楚地知道问题的位置和修复时间。

class börsLyssna implements ActionListener{
    public void actionPerformed(ActionEvent ave){
      for(int i=0; i<alla.size(); i++){
          if(alla.get(i).getClass().getName().equals("Aktie")){
              System.out.println("Attempting to set kurs to 0.0 at i=" + i");//TODO remove debugging code
              alla.get(i).setKurs(0.0);
          }
      }
   }
}

我个人认为alla.get(i) instanceof Aktie会解决它。虽然我认为如果你没有在集合中放置不同类型的对象,你的生活会更容易。如果你能在那里的所有东西上调用set(),那不是很好吗?