【问题标题】:how to return all of the content whilst adding it on as a string如何返回所有内容,同时将其作为字符串添加
【发布时间】:2016-04-17 02:05:23
【问题描述】:
import java.util.*;
 public class Help {

 public static String fromSender(ArrayList<Message> messageList, String pname){

    for(int i=0; i<messageList.size(); i++){

        if(messageList.get(i).getSender().equals(pname)){
            pname = messageList.get(i).getContent() + " ";
        }
    }
    return pname;
   }

 public static void main(String[] args){
     ArrayList<Message> messageList= new ArrayList<Message>();
     messageList.add(new Message("UKMark","UKJohn","message1 "));
     messageList.add(new Message("John","Don","ah"));
     messageList.add(new Message("UKMark","UKJohn","message2 "));
     System.out.print(fromSender(messageList, "UKMark") );
  }
}

我试图测试这段代码,它旨在打印 message1 message2 但是它只打印 message1,为什么它在遍历整个数组并将其存储在 pname 中时会这样做

【问题讨论】:

    标签: java generics arraylist return-value return-type


    【解决方案1】:

    您在fromSender 函数中覆盖变量pname 中的值,方法是在这行代码pname = messageList.get(i).getContent() + " "; 中为其分配第一个匹配的消息内容。所以在其余的循环中,pname 实际上是第一个匹配的消息内容,不再是“UKMark”,因此第二个消息的发件人将不匹配。

    只需使用另一个变量从您的 fromSender 函数返回。

    public static String fromSender(ArrayList<Message> messageList, String pname){
    
        String result = "";
        for(int i=0; i<messageList.size(); i++){
    
            if(messageList.get(i).getSender().equals(pname)){
                result += messageList.get(i).getContent() + " ";
            }
        }
        return result;
    }
    

    【讨论】:

      【解决方案2】:

      在 if 语句中使用 += 而不是 =。问题将得到解决。

      但理想情况下,您应该使用单独的 String 变量来维护您返回的内容,而不是使用传递的参数,尤其是当它的含义与您的用途不同时。

      【讨论】:

        猜你喜欢
        • 2023-03-12
        • 1970-01-01
        • 2022-01-09
        • 2019-12-11
        • 2013-08-06
        • 1970-01-01
        • 2017-09-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多