簡體   English   中英

如何避免在Java中使用動態變量/十億if語句?

[英]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類,包含nameip字段。 創建一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM