【问题标题】:How to loop through Object values in Java如何在Java中遍历对象值
【发布时间】:2019-12-30 12:20:05
【问题描述】:

我想简单地循环遍历对象的所有值,就像我使用数组的值一样。我在网上搜索过,但它们似乎总是使事情复杂得多,我无法理解。我的代码非常简单地显示了我想要做什么。

这是我的代码:

class myCON{

    int modelYear;
    String modelName;


    public myCON(int year, String name){

        modelYear = year;
        modelName = name;

    }


    public static void main(String[] args){

        /*

        ***********************************************************
        int[] arr= {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

        for ( int i=0; i<arr.length; i++){
            System.out.println(arr[i]);
        }

        System.out.println("end");

        *************************************************************

        */


        myCON myObj1 = new myCON(2005, "Nissan5");
        myCON myObj2 = new myCON(2006, "Nissan6");
        myCON myObj3 = new myCON(2007, "Nissan7");
        myCON myObj4 = new myCON(2008, "Nissan8");
        myCON myObj5 = new myCON(2009, "Nissan9");

        for(int i=1; i<6;i++){
            System.out.println(myObj[i].modelYear + " " + myObj[i].modelName);
        }

        System.out.println(myObj1.modelYear + " " + myObj1.modelName);
        System.out.println(myObj2.modelYear + " " + myObj2.modelName);
        System.out.println(myObj3.modelYear + " " + myObj3.modelName);
        System.out.println(myObj4.modelYear + " " + myObj4.modelName);
        System.out.println(myObj5.modelYear + " " + myObj5.modelName);




    }
}

【问题讨论】:

  • 你到底在迭代什么通过?我没有看到 ArrayList 或您的 myCon 对象的类似数据结构。
  • 提示:您的代码暗示您已经了解数组。因此,首先要学习如何将数组用于对象类型。并提示:遵循 java 命名约定。类名应该 A) 有意义并说明它们的含义,并且 B) 遵循大写的想法。

标签: java arrays object for-loop


【解决方案1】:

将它们存储在一个数组中,然后您可以对其进行迭代。 像这样:

myCON myObj[] = {new myCON(2005, "Nissan5"), new myCON(2006, "Nissan6")}
for(int i=0; i<myObj.length;i++){
   System.out.println(myObj[i].modelYear + " " + myObj[i].modelName);
}

【讨论】:

    【解决方案2】:

    您必须将您的对象添加到列表中。并循环处理该过程。

    List<myCon> myObj = new ArrayList<>();
    for(int i=0; i<5; i++) {
       myObj.add(new myCon("2005", "Nisan5");
    }
    

    然后为了显示它,再次使用循环。

    for(int i=0; i<5; i++) {
       System.out.println(myObj.get(i).modelYear + " " + myObj.get(i).modelName);
    }
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      List<myCON> myObjects = new ArrayList<>();
      myCON myObj1 = new myCON(2005, "Nissan5");
      myObjects.add(myObj1);
      myCON myObj2 = new myCON(2006, "Nissan6");
      myObjects.add(myObj2);
      myCON myObj3 = new myCON(2007, "Nissan7");
      myObjects.add(myObj3);
      
      for (int i = 0; i < myObjects.size(); i++) {
          System.out.println(myObjects.get(i).modelYear + " " + 
      myObjects.get(i).modelName);
      }
      

      【讨论】:

      • 你听说过 for-each 循环吗?
      • 是的!但问题是专门要求一个 for i。
      • 不,不是。这些问题询问如何迭代对象。
      • 我解释它的方式是这样的:他们要求'循环遍历对象的所有值,就像我使用数组的值一样',他们在 cmets 中给出了一个 for i 示例他们的代码,所以最简单的答案是展示它如何与 for i 一起工作。另外展示它如何与每个人一起工作意味着同时解释两件事,在我看来这是不必要的复杂(他们是一个新的贡献者,就像我一样)。
      【解决方案4】:

      哈哈,你不能用myObj[i] 来获取myObj1, myObj2, ... , myObj5。如果您遵循 Java 的语法,myObj[] 是一个数组,myObj[i] 是该数组的第 i 个元素。

      因此,您可以将这些对象放入数组中并对其进行迭代:)

      myCon[] myObjs = new myCon[] {myObj1, myObj2, myObj3, myObj4, myObj5};
      
      for(int i = 0; i < myObjs.length; i++) {
        System.out.println(myObjs[i].modelYear + " " + myObjs[i].modelName);
      }
      

      另外快速说明:我在 for 循环中以 i = 0 而不是 1 开始,因为数组是从零开始的,所以 myObj1 将位于 myObj[0],即 i = 0

      希望对你有帮助

      【讨论】:

        【解决方案5】:

        您的代码中实际上没有数组。

        您只是在为您的班级myCON 创建新的instances

        如果您想拥有一个 ArrayArrayList 以及您的 myCON 类的所有实例,您需要执行以下操作。

        class myCON {
        
            int modelYear;
            String modelName;
        
            public myCON(int year, String name) {
        
                modelYear = year;
                modelName = name;
            }        
        
            public static void main(String[] args) {
        
                List<myCON> myCONList = new ArrayList<>;
        
                myCONList.add(new myCON(2005, "Nissan5"));
                // Keep populating your List or Array until you are satisfied.
                myCONList.add(new myCON(2009, "Nissan9"));
        
                for (myCON m : myCONList) {
                    System.out.println(m.modelYear + " " + m.modelName);
                }
            }
        }
        

        当你这样做时:

        myCON myObj1 = new myCON(2005, "Nissan5");
        

        您无需创建任何数组,您只需创建myCON 类的新实例并将其“提供”给名为myObj1 的对象。

        Thing is myObj1 只是一个名称,可让您访问它的内容。最后的 '1' 并不意味着你可以将它命名为 myObjFirst,它不会有任何区别。

        所以当你尝试时:

        for(int i=1; i<6;i++){
            System.out.println(myObj[i].modelYear + " " + myObj[i].modelName);
        }
        

        您正在尝试访问您的代码中不存在的myObj(不是myObj1myObj2 或任何东西)。添加 [i] 不会在您的姓名末尾添加 i 的值。它只会尝试查看myObj 是否存在并且是一个数组,以便它可以访问该数组的第 i 个元素。

        您应该尝试检查some tutorials on Java,我认为它对您有很大帮助。

        【讨论】:

          【解决方案6】:

          试试这个。基本上,您需要做的是制作一个可用于所有实例的静态变量列表,并提供一个静态方法来获取该列表。这样你也可以在课堂外使用它。此外,类名应以大写开头。

          int modelYear;
          String modelName;
          
          /*
           * Create a static list object to store all the objects
           */
          static List<myCON> objectList = new ArrayList<myCON>(); 
          
          public myCON(int year, String name){
          
              modelYear = year;
              modelName = name;
          
              /*
               *  Add the newly created object to static list 
               */
              objectList.add(this);
          }
          
          
          public static void main(String[] args){
              myCON myObj1 = new myCON(2005, "Nissan5");
              myCON myObj2 = new myCON(2006, "Nissan6");
              myCON myObj3 = new myCON(2007, "Nissan7");
              myCON myObj4 = new myCON(2008, "Nissan8");
              myCON myObj5 = new myCON(2009, "Nissan9");
          
              for(myCON instance : getObjects()){
                  System.out.println(instance.modelYear + " " + instance.modelName);
              }
          }
          
          /*
           * Create a static getter method which can be called from anywhere
           * to get the list of objects.
           */
          public static List<myCON> getObjects() {
              return objectList;
          }
          

          【讨论】:

          • 我假设要求也是从类外部获取所有对象,而不仅仅是从 main 方法。在构造函数本身中添加到列表将自动跟踪随时随地创建的所有对象。我认为在 main 方法中仅添加一个数组不是正确的方法,因为在我看来,该功能应该与类一起使用。如果我在其他方法中需要同样的东西,我会怎么做?
          猜你喜欢
          • 2015-02-27
          • 2019-04-19
          • 2017-02-03
          • 2017-04-10
          • 2012-01-29
          • 1970-01-01
          • 2013-12-28
          • 1970-01-01
          • 2017-07-11
          相关资源
          最近更新 更多