如何在不使用集合的情况下返回多个值?
Posted
技术标签:
【中文标题】如何在不使用集合的情况下返回多个值?【英文标题】:How to return multiple values without using Collections? 【发布时间】:2015-08-03 19:09:49 【问题描述】:我正在使用教科书 Murach 的 Java 编程,在其中一个练习中,它要求我执行以下操作:
添加这个方法(书上给出的):
private static String displayMultiple(Displayable d, int count)
为此方法编写代码,使其返回一个字符串,其中包含由 int 参数指定的次数的 Displayable 参数。
Displayable
是实现getDisplayText()
的接口。而这个方法只返回一个带有对象实例变量的String
,即对于员工,它返回名字、姓氏、部门和薪水。
一切正常,除了“返回一个字符串”。
【问题讨论】:
...这种描述完全没有意义。除此之外,您能否提供到目前为止的代码?它可能会也可能不会帮助我们回答。 我理解这样的练习:让d
成为Displayable
的一个实例,这样d.getDisplayText()
将返回"ho"
。那么displayMultiple(d, 3)
应该返回字符串"hohoho"
。
【参考方案1】:
这可能是一个关于循环的练习:
您可以将d
转换为字符串:getDisplayText
。这会产生,比如说,"ABCD"
您希望返回 count
乘以该字符串 "ABCD"
。如果count == 3
,则表示"ABCDABCDABCD"
。
有用的关键字:for loop
、StringBuilder
。以下是您可以开始使用的模板:
String text = ;// Use getDisplayText here
StringBuilder ret = new StringBuilder();
/* Loop from 0 to count - 1 */
// Append `text` to `ret`
return ret.toString();
您实际上不需要返回多个值。
【讨论】:
谢谢,这也有道理!虽然这本书还没有教给我们关于 StringBuilder 类的知识。不过它会分两章出现! 使用+=
的问题是它对于count
的大值可能表现不佳;在这个简单的情况下你可能没问题,但是在循环中使用+=
有点反模式(+=
每次都会创建一个新字符串,所以在ABCD
示例中你最终会创建ABCD
,然后是ABCDABCD
,然后是ABCDABCDABCD
,等等;这是浪费)
这与在循环中附加到 StringBuilder 对象有何不同?
StringBuilder
有效地做到了(你只创建一个增长的字符串生成器,没有count
不同的字符串生成器):)【参考方案2】:
据我了解:
private static String displayMultiple(Displayable d, int count)
String s = "";
String ss = d.getDisplayText();
for(int i=0; i<count; i++)
s += ss;
return s;
【讨论】:
我想就是这样!我因为认为它要求返回该字符串三次而感到迟钝。那是不可能的,对吧?谢谢! 避免使用+
运算符在循环内连接字符串,因为它每次都必须通过复制旧字符串并添加新字符串来创建新的字符串实例。请改用StringBuilder
及其append
方法来存储您希望在字符串中存储的数据。然后,当您完成后,只需在 builder 上调用 toString
即可获得结果。【参考方案3】:
如果你想在不使用集合的情况下返回多个值,那么你可以创建一个类 -
public class MultipleValue
String firstValue;
String secondValue;
//other fields
然后从你想要返回多个值的someMethod()
(即firstValue
,secondValue
)你可以这样做 -
public MultipleValue someMethod()
MultipleValue mulVal = new MultipleValue();
mulVal.setFirstValue("firstValue");
mulVal.setSecondValue("secondVAlue");
return mulVal;
然后从someMethod()
的调用类中你可以像这样提取多个值(即firstValue
和secondValue
)——
//from some calling method
MultipleValue mulVals = someMethod();
String firstValue = mulVals.getFirstValue();
String secondValue = mulVals.getSecondValue();
【讨论】:
我可以这样多次返回MultipleValue类的对象吗? 这种情况下需要多次调用someMethod()
以上是关于如何在不使用集合的情况下返回多个值?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不刷新网页的情况下使用 ajax 和 jquery 动态更改 Datatables 的多个列标题?
如何在不使用闭包的情况下快速执行SelectorOnMainThread 并获取返回值?