如何避免在Java中使用动态变量/10亿if语句?

如何避免在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

因此,由于动态变量在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 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);