如何避免在Java中使用动态变量/10亿if语句?
因此,由于动态变量在Java中不是一件事,而且if语句将非常笨拙,我们正在寻求帮助将此代码块转换为更简洁的代码块 我查看了hashmaps,但它们似乎不太正确,很可能是我误解了它们如何避免在Java中使用动态变量/10亿if语句?,java,Java,因此,由于动态变量在Java中不是一件事,而且if语句将非常笨拙,我们正在寻求帮助将此代码块转换为更简洁的代码块 我查看了hashmaps,但它们似乎不太正确,很可能是我误解了它们 public String m1 = "Name1"; public String m1ip = "192.1.1.1"; public String m2 = "Name2"; public String m2ip = "192.1.1.1"; public String req; public String re
public String m1 = "Name1";
public String m1ip = "192.1.1.1";
public String m2 = "Name2";
public String m2ip = "192.1.1.1";
public String req;
public String reqip;
。。。剪掉一些代码
if (requestedMachine == 1)
{ req = m1; reqip = m1ip;}
else if (requestedMachine == 2)
{ req = m2; reqip = m2ip;}
else if (requestedMachine == 3)
{ req = m3; reqip = m3ip;}
else if (requestedMachine == 4)
{ req = m4; reqip = m4ip;}
else if (requestedMachine == 5)
{ req = m5; reqip = m5ip;}
requestedMachine将是一个整数,它定义了应该分配给req和reqip的值
提前谢谢 定义一个包含
名称
和ip
字段的机器类。创建一个机器数组。访问位于索引requestedMachine
(或requestedMachine-1
处的机器(如果数字从1开始):
首先,创建一个机器类:
class Machine {
String name;
String ip;
//Constructor, getters, setters etc omitted
}
初始化计算机阵列:
Machine[] machines = ... //initialize them with values
获取与请求的机器对应的机器:
Machine myMachine = machines[requestedMachine];
这是一个很好的枚举候选项:
/**
<P>{@code java EnumDeltaXmpl}</P>
**/
public class EnumDeltaXmpl {
public static final void main(String[] ingo_red) {
test(MachineAction.ONE);
test(MachineAction.TWO);
test(MachineAction.THREE);
test(MachineAction.FOUR);
}
private static final void test(MachineAction m_a) {
System.out.println("MachineAction." + m_a + ": name=" + m_a.sName + ", ip=" + m_a.sIP + "");
}
}
enum MachineAction {
ONE("Name1", "192.1.1.1"),
TWO("Name2", "292.2.2.2"),
THREE("Name3", "392.3.3.3"),
FOUR("Name4", "492.4.4.4"),
FIVE("Name5", "592.5.5.5");
public final String sName;
public final String sIP;
private MachineAction(String s_name, String s_ip) {
sName = s_name;
sIP = s_ip;
}
}
您最好的选择是构建一个具有IP、名称等的机器阵列。然后您只需要在阵列中找到所需的机器
public class Machine(){
private String name, ip;
public Machine(String name, String ip){
this.name=name;
// You can check a valid ip
this.ip=ip;
}}
public class Machines(){
private Machine[] machines;
private int number_of_machines;
public Machines(){
//define number_of_machines for your array and length of itself
}}
main()
Machine[] Machines = new Machine[number_of_machines];
Machine m1 = new Machine(String name, String ip);
.
.
.
Machine mn = new Machine(String name, String ip);
int number=5;
for(int i=0; i<number_of_machines; i++){
if (machines[number]<number_of_machines){
System.out.println("There is no machine with that number");
}else if (machines[number]==number_of_machines-1){
System.out.println("That is the choosen machine");
}
}
公共类机器(){
私有字符串名称,ip;
公用计算机(字符串名称、字符串ip){
this.name=name;
//您可以检查有效的ip地址
这个ip=ip;
}}
公共类机器(){
私人机器[]台机器;
机器的专用整数;
公共机器(){
//为数组定义\u机器的数量和长度
}}
main()
机器[]机器=新机器[机器数量];
机器m1=新机器(字符串名称,字符串ip);
.
.
.
机器mn=新机器(字符串名称,字符串ip);
整数=5;
对于(inti=0;i,如果您的id值不一定是整数,或者如果它们不是从0开始的连续序列,您也可以使用HashMap
HashMap<Integer, Machine> machines = new HashMap<>();
machines.put(1, machine1);
machines.put(7, machine7);
...
如果需要,你可以用字符串或任何你喜欢的东西来替换键。你的id值也不需要变成0,1,2,3,4,5,…如果你使用数组,那么它们也不需要变成0,1,2,3,4,5,…。为什么不是一个简单的数组?它必须是多维的,对吗?才能保存name+IP的数据。如果我诚实的话,我对实现它一点信心都没有。你你为什么不尊重命名约定呢?所有这些s_
和m_
使得代码很难阅读。甚至微软也放弃了这种难看的匈牙利符号。我喜欢匈牙利符号。我更喜欢iRequestedMachine
,而不是requestedMachine
,一眼就知道它是int,而不是Machine
对象。实际上,我会选择idxMachine
来明确它是一个索引,在这样使用它之前,它并不明显:机器[requestedMachine]
。我使用下划线表示函数参数,我认为这也让代码更清晰。你一眼就能知道它的来源。我还没有看到官方文件谴责匈牙利符号或以这种方式使用下划线。然后使用requestedMachineIndex,而不是iMachine或idxMachine。这是可读的、可发音的、可重复的SPECT Java命名约定。如果你一眼就看不出局部变量是从哪里来的,这意味着你的方法太长了,应该重构。不遵守Java命名约定会激怒你所有的同事。我喜欢requestedMachineIndex
的想法。我将寻找有关命名约定的更多信息。我不是按自己的方式做事,对我来说“一目了然”的哲学很重要,“不惹恼同事”也不是一个坏的哲学。
public class Machine(){
private String name, ip;
public Machine(String name, String ip){
this.name=name;
// You can check a valid ip
this.ip=ip;
}}
public class Machines(){
private Machine[] machines;
private int number_of_machines;
public Machines(){
//define number_of_machines for your array and length of itself
}}
main()
Machine[] Machines = new Machine[number_of_machines];
Machine m1 = new Machine(String name, String ip);
.
.
.
Machine mn = new Machine(String name, String ip);
int number=5;
for(int i=0; i<number_of_machines; i++){
if (machines[number]<number_of_machines){
System.out.println("There is no machine with that number");
}else if (machines[number]==number_of_machines-1){
System.out.println("That is the choosen machine");
}
}
HashMap<Integer, Machine> machines = new HashMap<>();
machines.put(1, machine1);
machines.put(7, machine7);
...
Machine machine7 = machines.get(7);