gpt4 book ai didi

java - 动态设置索引。这样所有可能的输入都可以被第一个整除

转载 作者:太空宇宙 更新时间:2023-11-04 06:57:25 27 4
gpt4 key购买 nike

当每个数字将最后一个数字加倍时(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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com