如何在循环中使用set方法? (Java)的

时间:2017-01-18 13:59:31

标签: java loops oop arraylist

我是初学者,想知道如何使用循环来更新对象的ArrayList中的属性。所以这里我有一个智能手机的arraylist,每个都有serialNo和品牌作为属性,但价格尚未更新。

public class Smartphone{
  public String serialNo;
  public String brand;
  public Double price;

  public Smartphone(String serialNo, String brand){
    this.serialNo = serialNo;
    this.brand = brand;
  }

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

}

public class Test{
  public static void main(String[] args) throws Exception{
    ArrayList<Smartphone> smartphones = new ArrayList<Smartphone>();

    for (int i = 0; i < 5; i++){
      Smartphone s = new Smartphone("12345678" ,"Samsung");
      smartphones.add(s);
    }


    //later I realize I want to add the price, 
    //but it seems the loop I'm using is not working
    for (int i = 0; i < 5; i++){
      smartphones.get(i).setPrice(398);
    }

  }
}

我想知道为什么我使用的循环不起作用,有没有其他方法可以为每个智能手机增加价格?

3 个答案:

答案 0 :(得分:1)

在AIDE上使用以下代码进行测试。你的代码运行正常。

请注意我使用增强的for循环来显示价格。如果你在循环中没有明确需要索引,那么增强的for循环是一种迭代遍历列表的简洁方法。

import java.util.ArrayList;

class Smartphone{
    public String serialNo;
    public String brand;
    public Double price;

    public Smartphone(String serialNo, String brand){
        this.serialNo = serialNo;
        this.brand = brand;
    }

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

}

public class Test{
    public static void main(String[] args) throws Exception{
        ArrayList<Smartphone> smartphones = new ArrayList<Smartphone>();

        for (int i = 0; i < 5; i++){
            Smartphone s = new Smartphone("12345678" ,"Samsung");
            smartphones.add(s);
        }


        //later I realize I want to add the price, 
        //but it seems the loop I'm using is not working
        for (int i = 0; i < 5; i++){
            smartphones.get(i).setPrice(398);
        }

        // Display prices to ensure they were set
        for (Smartphone phone : smartphones) {
            System.out.println(phone.price);

        }

    }
}

原谅奇怪的缩进。 AIDE喜欢用缩进字符快速和松散地玩。

答案 1 :(得分:-1)

您已为Student创建构造函数,并且您正在循环更新SmartPhone。添加SmartPhone的构造函数如下:

public Smartphone(String serialNo, String brand) {
    this.serialNo = serialNo;
    this.brand = brand;
}

编辑后续评论: 我刚刚编辑了拼写错误,添加了一个toString()方法来打印outout。 @AxelH,所以根据你的说法,额外的印刷声明解决了这个问题?

import java.util.ArrayList;

class Smartphone{
      public String serialNo;
      public String brand;
      public Double price;

      public Smartphone(String serialNo, String brand){
        this.serialNo = serialNo;
        this.brand = brand;
      }

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

      public String toString(){
        return this.serialNo+" "+this.brand+" "+this.price;

      }

    }

    public class Test1{
      public static void main(String[] args) throws Exception{
        ArrayList<Smartphone> smartphones = new ArrayList<Smartphone>();

        for (int i = 0; i < 5; i++){
          Smartphone s = new Smartphone("12345678" ,"Samsung");
          smartphones.add(s);
        }


        //later I realize I want to add the price, 
        //but it seems the loop I'm using is not working
        for (int i = 0; i < 5; i++){
          smartphones.get(i).setPrice(398);
        }

        for (int i = 0; i < 5; i++){
              System.out.println(smartphones.get(i).toString());
            }

      }
    }

答案 2 :(得分:-1)

您的代码似乎对我有用,但是如果您的意思是它无法正常工作,因为您无法看到价格,那么您需要做的就是在智能手机类中创建一个函数,返回{{1使用this.price后调用它。