java - 检查数组的两个元素是否在对角线上的最佳方法
问题描述
我有数组数组(不是原始对象)的两个元素的索引:
第一个元素 = tab[x0][y0]
第二个元素 = tab[x1][y1]
我想检查这两个元素是否都在对角线上,例如:
_________________
| | * | | |
-----------------
| | | | |
-----------------
| | | | * |
-----------------
| | | | |
-----------------
这里这两个点都在对角线上,所以我们应该返回 true。但是检查它的最佳方法是什么?
解决方案
将数组视为笛卡尔坐标空间,并计算连接两个元素(点)的直线的斜率(上升沿):
int rise = y1 - y0;
int run = x1 - x0;
如果rise
除以run
1 或 -1,则这两个元素形成对角线。1 或 -1 确定对角线的方向。您可以检查它们是否具有相同的符号和大小,而不是除法:
if (Math.abs(rise) == Math.abs(run)) {
if (Integer.signum(rise) == Integer.signum(run)) {
// diagonal
} else {
// diagonal that is another direction
}
} else {
// not diagonal
}
推荐阅读
- c - 我的 Cs50 凯撒密码程序有效,但无法通过 check50 测试
- android - 没有这样的表:@DatabseView
- flask - Flask Google Login with Google Drive access
- c# - ASP.NET Core MVC & C#:使用实体框架将数据插入数据库
- ruby-on-rails - 如何为 created_at 创建范围搜索功能
- vb.net - 随机数生成每次都产生相同的数字
- python - 在 if/else 语句上打开随机 tkinter 窗口
- r - Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : NA/NaN/Inf in 'y' In addition:
- docker - 服务 PHP 未能构建 Docker
- spring-data-elasticsearch - 如何禁用 Spring Data Elasticsearch 中的任何写入操作?