【问题标题】:Proper looping construct using Arrays and List使用数组和列表的正确循环结构
【发布时间】:2012-06-14 20:09:36
【问题描述】:

在这个简单的示例中,我想创建一个字符串数组,其中填充了每个人在我的数据库中的第一个和最后一个。我知道我遗漏了一些非常明显的东西,因为我在以下循环方法中不断覆盖 i。第二只眼睛肯定会有所帮助。

    /**
 * 
 * @return
 */
public String[] buildFullNameContainer(){

    List<Person> allPeople = Person.findAllPeople();
    String[] peopleContainer = new String[] {""};
    String fullName = "";



        for (int i = 0; i < peopleContainer.length; i++) {
            for (Person person : allPeople) {
                fullName = person.getFirstName() + " " + person.getLastName();  
                peopleContainer[i] = fullName; 

            }
        }
    return peopleContainer;
}

【问题讨论】:

  • 到底出了什么问题?有什么不行吗?
  • 调用此方法后循环遍历String数组时只有一个值
  • @Warz:你怎么会期望不止一个元素?您正在创建一个从一个元素开始的数组,并且数组永远不会扩展...

标签: java arrays list for-loop


【解决方案1】:

您的数组始终只有一个元素 - 您应该将其创建为与列表相同的长度。此外,你有两个无缘无故的嵌套循环,我认为fullName 变量没有意义。这是我要使用的代码:

String[] peopleContainer = new String[allPeople.size()];

for (int i = 0; i < peopleContainer.length; i++) {
    Person person = allPeople.get(i);
    peopleContainer[i] = person.getFirstName() + " " + person.getLastName();
}

【讨论】:

    【解决方案2】:

    替换

    String[] peopleContainer = new String[] {""};
    

    String[] peopleContainer = new String[allPeople.size()];
    

    另外,编辑你的循环如下:

    for(int i = 0; i < peopleContainer.length; i++)
    {
        Person person = allPeople.get(i);
        fullName = person.getFirstName() + " " + person.getLastName();  
        peopleContainer[i] = fullName;  
    }
    

    【讨论】:

    • 如果我删除了外部for循环,我如何引用'i',因为它不存在
    • 在开头初始化一个int i。在peopleContainer[i] = fullName; 行中,将i 更改为i++
    • 最佳答案,因为它摆脱了不必要的内部 for 循环。会接受在几个
    【解决方案3】:

    我认为这需要更改为:

    String[] peopleContainer = new String[] {""};
    

    收件人:

    String[] peopleContainer = new String[allPeople.size()];
    

    【讨论】:

      【解决方案4】:

      您正在循环您的结果数组,而不是您的源数据集合。您必须首先正确调整数组的大小,然后循环遍历数组或列表的大小。不需要嵌套的 for。

      public String[] buildFullNameContainer(){
      
          List<Person> allPeople = Person.findAllPeople();
          String[] peopleContainer = new String[allPeople.size()];
          for (int i = 0; i < peopleContainer.length; i++) {
              Person person = allPeople.get(i);
              String fullName = person.getFirstName() + " " + person.getLastName();  
              peopleContainer[i] = fullName; 
          }
      return peopleContainer;
      }
      

      【讨论】:

        【解决方案5】:

        试试这个。

            List<Person> allPeople = Person.findAllPeople();
            String[] peopleContainer = new String[allPeople.size()];
        
            for (int i=0;i < allPeople.size();i++;) {
                  Person person=allPeople.get(i);
                  fullName = person.getFirstName() + " " + person.getLastName();  
                  peopleContainer[i] = fullName; 
            }
        

        【讨论】:

          猜你喜欢
          • 2021-12-31
          • 2018-06-23
          • 2023-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多