Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何减少这一长串if语句?_Java - Fatal编程技术网

Java 如何减少这一长串if语句?

Java 如何减少这一长串if语句?,java,Java,这里我有一长行if语句,用来检测int[]anArray的值在一定范围内数组=新整数[15]int[]数组的值,从数组[0]开始是: 49 50 51 59 0 5 9 10 15 19 50 55 89 99 100 这是确定给定值是否在某个范围内的代码部分: int[] counterarray = new int[10]; for (x = 14; x >= 0; x--) { System.out.println(anArray[x]); i

这里我有一长行if语句,用来检测
int[]anArray的值在一定范围内<代码>数组=新整数[15]int[]数组的值,从数组[0]
开始是: 49 50 51 59 0 5 9 10 15 19 50 55 89 99 100

这是确定给定值是否在某个范围内的代码部分:

int[] counterarray = new int[10];
    for (x = 14; x >= 0; x--)
    {
      System.out.println(anArray[x]);
      if (anArray[x] >= 0 && anArray[x] < 10)
      {
        counterarray[0] = counterarray[0] + 1;

      }
      if (anArray[x] >= 10 && anArray[x] < 20)
      {
        counterarray[1] = counterarray[1] + 1;

      }
      if (anArray[x] >= 20 && anArray[x] < 30)
      {
        counterarray[2] = counterarray[2] + 1;

      }
      if (anArray[x] >= 30 && anArray[x] < 40)
      {
        counterarray[3] = counterarray[3] + 1;

      }
      if (anArray[x] >= 40 && anArray[x] < 50)
      {
        counterarray[4] = counterarray[4] + 1;

      }
      if (anArray[x] >= 50 && anArray[x] < 60)
      {
        counterarray[5] = counterarray[5] + 1;

      }
      if (anArray[x] >= 60 && anArray[x] < 70)
      {
        counterarray[6] = counterarray[6] + 1;

      }
      if (anArray[x] >= 70 && anArray[x] < 80)
      {
        counterarray[7] = counterarray[7] + 1;

      }
      if (anArray[x] >= 80 && anArray[x] < 90)
      {
        counterarray[8] = counterarray[8] + 1;

      }
      if (anArray[x] >= 90 && anArray[x] < 101)
      {
        counterarray[9] = counterarray[9] + 1;

      }
    }
    System.out.println("counterarray[0] is " +counterarray[0]);
    System.out.println("counterarray[1] is " +counterarray[1]);
    System.out.println("counterarray[2] is " +counterarray[2]);
    System.out.println("counterarray[3] is " +counterarray[3]);
    System.out.println("counterarray[4] is " +counterarray[4]);
    System.out.println("counterarray[5] is " +counterarray[5]);
    System.out.println("counterarray[6] is " +counterarray[6]);
    System.out.println("counterarray[7] is " +counterarray[7]);
    System.out.println("counterarray[8] is " +counterarray[8]);
    System.out.println("counterarray[9] is " +counterarray[9]);
int[]计数器数组=新的int[10];
对于(x=14;x>=0;x--)
{
System.out.println(anArray[x]);
如果(anArray[x]>=0&&anArray[x]<10)
{
计数器数组[0]=计数器数组[0]+1;
}
如果(anArray[x]>=10&&anArray[x]<20)
{
计数器阵列[1]=计数器阵列[1]+1;
}
如果(anArray[x]>=20&&anArray[x]<30)
{
计数器阵列[2]=计数器阵列[2]+1;
}
如果(anArray[x]>=30&&anArray[x]<40)
{
计数器阵列[3]=计数器阵列[3]+1;
}
如果(anArray[x]>=40&&anArray[x]<50)
{
计数器阵列[4]=计数器阵列[4]+1;
}
如果(anArray[x]>=50&&anArray[x]<60)
{
计数器阵列[5]=计数器阵列[5]+1;
}
如果(anArray[x]>=60&&anArray[x]<70)
{
计数器阵列[6]=计数器阵列[6]+1;
}
如果(anArray[x]>=70&&anArray[x]<80)
{
计数器阵列[7]=计数器阵列[7]+1;
}
如果(anArray[x]>=80&&anArray[x]<90)
{
计数器阵列[8]=计数器阵列[8]+1;
}
如果(anArray[x]>=90&&anArray[x]<101)
{
计数器阵列[9]=计数器阵列[9]+1;
}
}
System.out.println(“计数器数组[0]是“+计数器数组[0]);
System.out.println(“计数器数组[1]是“+计数器数组[1]);
System.out.println(“计数器数组[2]是“+计数器数组[2]);
System.out.println(“计数器数组[3]是“+计数器数组[3]);
System.out.println(“计数器数组[4]是“+计数器数组[4]);
System.out.println(“计数器数组[5]是“+计数器数组[5]);
System.out.println(“计数器数组[6]是“+计数器数组[6]);
System.out.println(“计数器数组[7]是“+计数器数组[7]);
System.out.println(“计数器数组[8]是“+计数器数组[8]);
System.out.println(“计数器数组[9]是“+计数器数组[9]);
是的,这就是代码,但是if语句的长列表似乎有点多余。for循环翻转每个数组值,并确定它们所属的范围。然后
int[]计数器数组将值的数量相加。那么,我该如何让长长的if语句列表更美观呢?

int[]counteraray=newint[10];
int[] counterarray = new int[10];
for (x = 14; x >= 0; x--)
{
  if (anArray[x] >= 0 && anArray[x] < 101) {
    int idx = Math.min(anArray[x] / 10, 9);
    ++counterarray[idx];
  }
}
对于(x=14;x>=0;x--) { 如果(anArray[x]>=0&&anArray[x]<101){ int idx=Math.min(数组[x]/10,9); ++计数器阵列[idx]; } }
如果所有范围都是10的倍数(例如0-9、10-19、20-29等),那么我们只需简单地除以10即可将索引放入
计数器数组中。
Math.min
部分用于处理(原始)范围为90-100的奇数最后一个案例;在100的情况下,idx将等于10,但是
Math.min
将其钳制,以便它不会成为数组中的越界索引


if
检查是为了确保我们只查看预期范围内的值(在本例中为0-100)。否则,对于较大的值(例如200),我们可能会错误地增加最后一个存储桶。

嘿,这确实有效!但是请记住,在我的上一个if语句中,最大范围参数是101,而不是100。这不是10个,而是11个。如果有解释的话,我会+1这个-,不仅仅是它为什么起作用,还有你是怎么做到的。就我个人而言,我不太喜欢在没有评论的情况下倾销代码。这是一句老话:“给一个人一条鱼,或者教他们如何钓鱼。”(再说一遍,没有我的支持,你已经获得了很多选票,所以……由你决定。)我同意伊莎维特所说的。我对代码进行了测试,代码运行正常,但对我来说没有意义。不完全相同:只有当anArray[x]在0到100(包括0到100)的范围内时,才应该增加值。MIN意味着你设定了一个值,比如说200。这就是为什么我更喜欢代码转储。更重要的是,一个通情达理的读者可能会想,“哦,太好了!我不知道巴迪是怎么想的!”剥夺了他们的答案,你就失去了整个答案的真正本质。当然。现在上床睡觉,明天早上再回来查看。:)