【问题标题】:How to set object array value in Java from other method?如何从其他方法在 Java 中设置对象数组值?
【发布时间】:2015-04-15 18:21:53
【问题描述】:

我已经设置了一个名为 Foodlist 的类,其中包括 setter 和 getter。 我的问题是,没有在每个 Flist[i] Array 中设置值。

我期待打印时每个 Flist[i].getName 的输出不同。但相反,getName 从 setName 中获取最后一个值。

这是我的代码:

public static void main (String[] args)
{
    Scanner input = new Scanner (System.in);
    Foodlist [] Flist = new Foodlist [3];

    for (int i = 0 ; i <Flist.length; i++)
    {
        Flist[i] = new Foodlist();
    }

    ReturnModel(Flist);

    for (int i = 0; i <Flist.length; i++)
    {
        System.out.println("Model is "+ Flist[i].getName());
    }

}

static void ReturnModel (Foodlist[] Flist)
{

    Scanner input = new Scanner (System.in);
    for (int i = 0; i < Flist.length; i ++)
    {
        String temp;
        System.out.println("Enter Food Name Please:");
        temp = input.next();
        Flist[i].setName(temp);

    }
}

我的食物清单代码。

    public class Foodlist
{
   static String Name;
   static int Price;
   static String Desc;

   public static void main (String [] args)
   {
       String nem;
       int pris;
       String des;

       nem = "";
       pris = 0;
       des ="";

       setName(nem);
       setPrice (pris);
       setDesc (des);


    }

    public static void setName (String nem)
    {
        Name = nem;
    }

    public static String getName()
    {
        return Name;
    }

    public static void setPrice (int  pris)
    {
        Price = pris;
    }

    public static int getPrice ()
    {
        return Price;
    }

    public static void setDesc (String des)
    {
        Desc = des;
    }

    public static String getDesc()
    {
        return Desc;
    }
}

【问题讨论】:

  • 你的name字段肯定是static
  • 你能展示你对Foodlist的实现吗?没有看到所有相关代码,很难给你一个好的答案。但我的第一个猜测是您静态存储名称,因此Foodlist 的所有实例都具有相同的名称。
  • ReturnModel 应该重命名 returnModel。大写仅适用于类、枚举、接口。
  • @Gavin 在问题中添加了 Foodlist 代码 :)
  • @RohitJain 是正确的。发布完整代码后,很明显您的 name 变量是 static

标签: java arrays object methods input


【解决方案1】:

问题是由于您静态存储名称,这意味着Foodlist 的每个实例都在访问相同的名称。

此外,您的 getter 和 setter 是静态的,因此无论您拥有哪个实例,它都会调用静态 getter 和 setter。您想从 Foodlist 类中的所有内容中删除静态。

我看到你的 Foodlist 类中也有一个 main 方法,但你不想要这个。我假设您添加了这个,以便您可以为新的 Foodlist 实例中的字段设置默认值。相反,您需要将其替换为默认构造函数,该构造函数将以 public Foodlist() 开头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    相关资源
    最近更新 更多