【发布时间】:2010-08-10 16:58:35
【问题描述】:
实际上,不知道如何措辞这个算法问题。我在一个 android 应用程序中有切换按钮,每个按钮对应一个编号的频道。通道是 (1,n),但切换按钮 ID 是一些未知的、无序的(对按钮而言)整数。我需要收集频道号并构建一个命令字符串。我 1995 年的 Java 技能给了我这个:
String ch;
int i = 1;
for (ToggleButton toggle : toggles) {
if (toggle.isChecked()) {
ch = String.format("+%d", i+1);
channels = channels.concat(ch);
}
}
如果选中切换按钮 1,2,4,5,6,7,11,13,21,22,23,24,25,则此代码 sn-p 成功地给了我字符串 "+1+2+4+5+6+7+11+13+21+22+23+24+25"
但是,我更想做的是字符串"+1/2, +4/7, +11, +13, +21/25"
我想知道是否有比多个 if 语句更简单的方法:
String ch;
int it = 0;
int last = 1;
for (ToggleButton toggle : toggles ) {
if (toggle.isChecked()) {
if (it == last + 1) {
// somehow continue or note that we're only adding the "/"
} else {
// If we're not the next one, then build the last string
// of "n/last" and then add ", +" to start building next string
}
}
last++;
}
这似乎是一种蛮力类型的算法,所以我不知道 Java 是否有更优雅的解决方案(或者,更可能的是,我应该有)
谢谢。
【问题讨论】:
-
我认为您的意思是 1-2、4-7,...您还说 22/25,我认为您的意思是 21-25。有足够的歧义,我害怕更改你的帖子,以防我猜错了。
-
比尔,谢谢。 21/25 是正确的。但是,我实际上确实是指 1/2、4/7。但是,由于“/”和“-”一样只是一个字符串,所以这并不重要。这是我正在使用的一个奇怪的 telnet 命令集,多个通道的命令出于某种原因使用了斜线。
-
我的意思是,在这里提出问题时更直观。您可以事后进行翻译 - 或者在我的解决方案中实例化帮助程序类时将分隔符作为参数传递给构造函数:)