![](/img/trans.png)
[英]How do I avoid using if statements with a large amount of variables in java
[英]How to avoid using dynamic variables / a billion if statements in Java?
因此,由於動態變量不是Java中的東西,並且if語句非常笨拙,所以正在尋找幫助將此代碼塊轉換為更簡潔的代碼塊。
我查看了哈希圖,它們似乎不太正確,但我很可能誤解了它們。
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分配哪些值。
提前致謝。
定義一個Machine類,包含name
和ip
字段。 創建一個Machine數組。 訪問位於索引requestedMachine
的機器(如果數字從1開始,則為requestedMachine - 1
1):
Machine[] machines = new Machine[] {
new Machine("Name1", "192.1.1.1"),
new Machine("Name2", "192.1.1.1"),
...
}
...
Machine machine = machines[requestedMachine - 1];
首先,創建一個Machine類:
class Machine {
String name;
String ip;
//Constructor, getters, setters etc omitted
}
初始化一系列機器:
Machine[] machines = ... //initialize them with values
獲取與requestedMachine
對應的機器:
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;
}
}
輸出:
[C:\java_code\]java EnumDeltaXmpl
MachineAction.ONE: name=Name1, ip=192.1.1.1
MachineAction.TWO: name=Name2, ip=292.2.2.2
MachineAction.THREE: name=Name3, ip=392.3.3.3
MachineAction.FOUR: name=Name4, ip=492.4.4.4
您最好的選擇是使用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");
}
}
}
如果你的id值不一定是整數,或者它們不是從0向前的連續序列,你也可以使用HashMap。 就像是
HashMap<Integer, Machine> machines = new HashMap<>();
machines.put(1, machine1);
machines.put(7, machine7);
...
獲得所需的價值
Machine machine7 = machines.get(7);
如果需要,您可以使用String或任何您喜歡的密鑰替換密鑰。 你的id值也不需要去0,1,2,3,4,5,......如果你要使用數組,他們需要它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.