当每个数字将最后一个数字加倍时(15 * 2 = 30,30 * 2 = 60 ...),如何使用一组数字(所有数字都可以被第一个数字[在本例中为15]整除)来获取它们各自的索引。我正在寻找一种数学方法来完成此任务,但它却无法实现。我想要一行代码(或一个简短的方法)来替换下面的 switch 语句。
考虑以下代码:
//represents "h:mm"
String[] values = new String[]{"0:15", "0:30", "1:00", "2:00"};
JComboBox<String> comboBox = new JComboBox<String>(values);
comboBox.setEditable(false); //only values of values can be used
...
switch(interval)
{
case 15:
comboBox.setSelectedIndex(0);
break;
case 30:
comboBox.setSelectedIndex(1);
break;
case 60:
comboBox.setSelectedIndex(2);
break;
case 120:
comboBox.setSelectedIndex(3);
break;
}
在上述情况下,间隔
将始终是四种情况之一。我的数学大脑已经检查了一晚上,我想不出如何使用数字 15、30、60 和 120 来获得索引 0、1、2 和 3。我知道这个问题有一个简单的答案,但已经晚了,我无法理解!
注释:
-如果你对这个问题有更好的名字,请评论,我的很糟糕
-我知道我可以(并且在上面摘录的同一个类中)使用 Calendar 实例和 ListCellRenderer 来更轻松地完成此任务,但我以前遇到过类似的情况,并且不记得我是如何解决它的!
最佳答案
单行替换。
comboBox.setSelectedIndex((int)(Math.log(interval/15)/Math.log(2)));
这是一个示例程序
public class Test {
public static void main(String[] args){
for(int interval: new int[]{15,30,60,120}){
System.out.println((int)(Math.log(interval/15)/Math.log(2)));
}
}
}
输出
0
1
2
3
关于java - 动态设置索引。这样所有可能的输入都可以被第一个整除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22550322/