如何减少这么长的 if 语句列表?

2023-12-21

所以这里我有一长串 if 语句,应该检测int[] anArray;是在一定范围内的。anArray = new int[15];的价值观int[] anArray;, 从...开始anArray[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]);

是的,这就是代码,但是一长串 if 语句似乎有点多余。 for 循环遍历每个数组值并确定它们属于哪个范围。然后int[] counterarray将值的数量加在一起。那么,如何使一长串 if 语句更美观呢?


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];
  }
}

如果所有范围都是 10 的倍数(例如 0-9、10-19、20-29 等),那么我们只需简单除以 10 即可得到索引counterarray. The Math.min部分是处理(原始)范围为 90-100 的奇数最后一个情况;在 100 的情况下,idx 将等于 10,但是Math.min限制它,这样它就不会成为数组中的越界索引。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何减少这么长的 if 语句列表? 的相关文章

随机推荐

  • MySQL POINT空间索引查询以中心POINT为半径范围内

    我看到许多解决方案可以从 a 中获取最近的行POINT转换为X and Y 并对距离进行三角计算 据我了解 这似乎没有利用空间索引 从最常见的意义上来说 如何利用空间索引 返回其空间索引的行POINT位于中心的半径范围内POINT 换句话说
  • NODEJS:立即发送文件和数据

    这就是我得到的 它工作得很好 但我希望能够在客户端登录我的网站时向他发送文件和数据 JSON 有什么办法可以结合起来吗 app get function req res res sendfile dirname index html 您无法
  • mysql联合结果中的错误列

    使用 union 时我得到了错误的列名称 这就是我所做的 我有两个非常大的表 具有相同的结构和不同的记录 所以就是这样 mysql gt select from e18 where 15 like car limit 1
  • Haskell 中 Idris 的 Fin 的首选替代方案是什么

    我想要一个可以包含 0 到 n 值的类型 其中 n 位于类型级别 我正在尝试类似的事情 import GHC TypeLits import Data Proxy newtype FiniteNat n FiniteNat toIntege
  • 在未右键单击并选择“以管理员身份运行”的情况下运行 WPF 应用程序时出现性能问题

    我有一个 WPF 应用程序 将在运行 Windows 10 的平板电脑上使用 在我的开发环境中 应用程序运行得非常快 但是 如果我在没有管理员权限的平板电脑上运行该应用程序 该应用程序响应非常慢 所有动画都很慢 滚动不流畅 并且触摸问题很明
  • 在react-native中打开另一个屏幕

    我在本机反应中有这个屏幕 import React Component from react import AppRegistry TouchableOpacity Text Button Image TextInput PropTypes
  • 如何访问 Oak/Deno 中的表单主体

    我用的是橡木 德诺 我有一个从提供的 ejs 文件提交的表单 如何访问表单主体 当我将其记录到控制台时 它会打印 type form value URLSearchParamsImpl 帖子处理程序如下所示 router post add
  • 能够使用函数指针调用外部类的私有方法

    基于以下answer https stackoverflow com questions 27536395 passing pointer to member func of outer class template to nested c
  • 数据类型 date 和 datetime 在 add 运算符中不兼容

    我最近在 SQL Server 2008 开发环境中创建了一个连接日期和时间的函数 如下所示 select cast 2016 11 09 15 35 00 AS DATE CAST 00 00 00 AS DATETIME 在 SQL S
  • Emacs:选择一个区域并键入以删除该区域

    如何告诉 emacs 以与 Windows 或 Mac 相同的方式工作 如果我选择一个区域并开始键入 该区域将在插入新文本之前被删除 我不认为它是开箱即用的 看起来你必须按照以下方式打开删除选择模式EmacsWiki 上的这篇文章 http
  • 如何使用jhipster创建实体后删除它?

    我使用 yo jhipster entity 命令创建了 3 个实体 作者 书籍 图书馆 但在一个实体 图书馆 中 我有一个多对多关系 与书籍 但这导致 mappedBy 引用未知的目标实体属性 com com tst testdomain
  • 如何编写包含其他标记帮助程序的自定义 ASP.NET 5 标记帮助程序

    我一直在谷歌上查看 taghelpers 的示例 但找不到我正在寻找的任何示例 我有以下代码 div class form group div
  • Servlet:HttpServletRequest 中的 setAttribute 与 HttpSession 中的 setAttribute

    方法有什么区别setAttribute of HttpServletRequest类和setAttribute of HttpSession班级 它们在什么情况下使用 一个在请求范围内设置属性 另一个在会话范围内设置属性 主要区别在于示波器
  • 基于argparse的调用函数

    我是 python 新手 目前正在使用它 我有一个脚本可以对设备进行一些 API 调用 我想扩展功能并根据调用脚本时给出的参数调用不同的函数 目前我有以下内容 parser argparse ArgumentParser parser ad
  • 如何在 Windows 2012R2 上为 IIS 网站制作 SHA2 CSR 文件?

    我需要网站的 SSL 证书 但 CA 不接受我的 CSR 并告诉我 这是 SHA1 算法 您应该发送基于 SHA2 的 CSR 文件 如何在 Windows 2012R2 上为 IIS 网站创建 SHA2 CSR 文件 None
  • MVC Razor 部分视图中 webGrid.GetHtml 的分页

    我的页面上有两个选项卡 对于第一个选项卡 我在页面加载时加载网格 第二次 点击时 我正在使用Ajax ActionLink使用部分视图加载网格 我在用webGrid GetHtml 在两个选项卡中呈现具有默认分页的网格 第一个选项卡的分页工
  • 使用 OmniAuth 在 Factory Girl 中创建用户?

    我当前正在创建一个使用 OmniAuth 来创建和验证用户的应用程序 我在测试过程中遇到问题 因为 Factory Girl 无法在没有 OmniAuth 的情况下生成用户 我有几种不同的方法让工厂女孩使用omniauth 创建用户 但都没
  • 如何动画matplotlib的drawgreatcircle函数?

    我创建了一个小程序 以 NHL 城市为对象 然后绘制球队在整个赛季中走过的路径 生成的图形很混乱 所以我想到 如果我对飞行路径进行动画处理 会很有趣 就像观看印第安纳琼斯电影一样 线条从一个点延伸到另一个点 通过查看其他 matplotli
  • firebug - 隐藏特定 .css 文件中的样式

    有什么方法可以隐藏 firebug 样式面板中特定样式表的样式吗 例如我使用 CSS 重置并包含reset css在我的页面中 但当它在样式窗口中显示无用信息时 它看起来不太好 谢谢 我知道您在询问如何使用 FireBug 禁用样式表 你两
  • 如何减少这么长的 if 语句列表?

    所以这里我有一长串 if 语句 应该检测int anArray 是在一定范围内的 anArray new int 15 的价值观int anArray 从 开始anArray 0 是 49 50 51 59 0 5 9 10 15 19 5