簡體   English   中英

使用for:每個循環返回嵌套在ArrayList中的多個字符串

[英]Using for : each loop to return multiple Strings nestled in an ArrayList

我正嘗試使用以下方法歸還運動隊的所有“球員及其目標”:

public String printPlayers(){        
    for (Player player : this.players){
        return player.toString();
    }
}

Netbeans表示沒有return語句,我認為這是因為它位於for-each循環中。 但是,如果我將其放置在外面,它只會返回一項。 這是測試代碼:

    Team barcelona = new Team("FC Barcelona");

    Player brian = new Player("Brian");
    Player pekka = new Player("Pekka", 39);

    barcelona.addPlayer(brian);
    barcelona.addPlayer(pekka);
    barcelona.addPlayer(new Player("Mikael", 1));

    barcelona.printPlayers();

在Player對象中,這是toString的作用:

public String toString(){
        return ("Player: "+this.name+", goals "+this.goals);
    }

Java只允許您返回一個對象。 無法返回多個對象。 如果要從單個方法返回多個對象,則必須首先將它們收集到單個對象中,例如數組, ListString ,然后將其返回。

讓我們看看您的代碼。 Netbeans抱怨缺少return語句,因為您的players集合可能為空。 在這種情況下,永遠不會執行循環塊,並且該方法將在沒有return語句的情況下結束,這是不允許的。 因此,讓我們按以下方式修復您的方法:

public String printPlayers(){        
    for (Player player : this.players){
        return player.toString();
    }
    return "";
}

現在該方法也只返回一個對象:它將集合中的第一個播放器轉換為字符串,然后將其返回。 其他玩家將被忽略。 因此,您必須將玩家收集在一個對象中。 由於您要返回一個字符串,因此有必要將這些字符串收集到一個字符串中:

public String printPlayers(){        
    String result = "";
    for (Player player : this.players){
        result += " " + player.toString();
    }
    return result;
}

現在,您可以嘗試使結果更好,例如,刪除第一個元素的前導空格,或者添加逗號而不是空格等。此外,為了提高性能,您可以使用StringBuilder來構建字符串(但請考慮一下有了工作方法就可以提高性能!)。

為什么netbeans抱怨,如果不輸入for循環該怎么辦? 因此,總應該有回報。

遇到實際問題,

只需構建一個String並返回

public String printPlayers(){   
        StringBuilder builder=new StringBuilder();     
        for (Player player : this.players){
            builder.append(player).append(" ");
        }
       return builder.toString();
    }

這將建立一個String,將所有玩家附加為String並最終返回。

 public String printPlayers(){        
  String data="";
 for (Player player : this.players){
       data +=player.toString();
  }
      return data;
}

使用StringBuilder

public String printPlayers(){ 
    StringBuilder sb = new StringBuilder();       
    for (Player player : this.players){
      sb.append(player.toString());
    }
    return sb.toString();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM