当前位置: 首页 > 知识库问答 >
问题:

如何浏览数组,检查它们之间的所有元素,以及它们是否符合条件显示它们?

章侯林
2023-03-14

好吧,问题很简单,但我不知道怎么做。我试着逐个检查两个元素,但这不是最好的方法。我有一组圆形物体。数组有位置字段X和Y。我想遍历数组,检查所有元素是否在一条线上(水平或垂直)。我如何通过数组检查圆心是否在同一条线上。

我试着做这样的事情,看看圆圈是否在同一条垂直线上,但我说它需要一个元素与邻居。

void isCenterSameHorizOrVert(Circle[] c) {
    for(int i = 0; i < c.length; i++) {
        for(int j = i + 1; j < c.length - 1; j++) {
            if(c[i].getPlanarX() == c[j].getPlanarX()) {

            }
        }
    }
}

共有1个答案

房光临
2023-03-14

以下是我的方法:

package amedv;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.junit.Test;

class Circle {
    int positionX;
    int positionY;

    public Circle(int positionX, int positionY) {
        super();
        this.positionX = positionX;
        this.positionY = positionY;
    }
    public int getPositionX() {
        return positionX;
    }
    public void setPositionX(int positionX) {
        this.positionX = positionX;
    }
    public int getPositionY() {
        return positionY;
    }
    public void setPositionY(int positionY) {
        this.positionY = positionY;
    }
}

class CircleHM {
    HashMap hmCirlesX;
    HashMap hmCirlesY;

    public HashMap getHmCirlesX() {
        return hmCirlesX;
    }
    public void setHmCirlesX(HashMap hmCirlesX) {
        this.hmCirlesX = hmCirlesX;
    }
    public HashMap getHmCirlesY() {
        return hmCirlesY;
    }
    public void setHmCirlesY(HashMap hmCirlesY) {
        this.hmCirlesY = hmCirlesY;
    }

}

public class CircleTest {

    private Circle[] circles = new Circle[] {new Circle(1,2), new Circle(1,5), new Circle(6,7), new Circle(2,7), new Circle(3,8), new Circle(3,5)};

    private HashMap<Integer, HashMap<Integer, ArrayList<Integer>>> hmCirlesX = new HashMap<Integer, HashMap<Integer, ArrayList<Integer>>>();
    private HashMap<Integer, HashMap<Integer, ArrayList<Integer>>> hmCirlesY = new HashMap<Integer, HashMap<Integer, ArrayList<Integer>>>();

    private boolean findCircleWithCenterSameHorizOrVert(Circle[] cirArr) {
        if (cirArr.length == 0) {
            return false;
        }

        int hashCode = cirArr.hashCode();

        if (!hmCirlesX.containsKey(hashCode) && !hmCirlesY.containsKey(hashCode)) {
            hmCirlesX.put(hashCode, new HashMap<Integer, ArrayList<Integer>>());
            hmCirlesY.put(hashCode, new HashMap<Integer, ArrayList<Integer>>());
        for (int i=0; i<circles.length; i++) {      
            ArrayList arrlCirclesX = hmCirlesX.get(hashCode).containsKey(circles[i].positionX) ? hmCirlesX.get(hashCode).get(circles[i].positionX) : new ArrayList();
            arrlCirclesX.add(circles[i]);
            hmCirlesX.get(hashCode).put(circles[i].positionX, arrlCirclesX);

            ArrayList arrlCirclesY = hmCirlesY.get(hashCode).containsKey(circles[i].positionY) ? hmCirlesY.get(hashCode).get(circles[i].positionY) : new ArrayList();
            arrlCirclesY.add(circles[i]);
            hmCirlesY.get(hashCode).put(circles[i].positionY, arrlCirclesY);
        }
        }

        return (hmCirlesX.size() > 0 && hmCirlesY.size() > 0);      
    }

    private void showCenterSameHorizOrVert(Circle[] cirArr) {
        if (findCircleWithCenterSameHorizOrVert(cirArr)) {
            int hashCode = cirArr.hashCode();

            HashMap<Integer, ArrayList<Integer>> hmX = hmCirlesX.get(hashCode);
            HashMap<Integer, ArrayList<Integer>> hmY = hmCirlesY.get(hashCode);

            Iterator itmX = hmX.entrySet().iterator();
        while (itmX.hasNext()) {
            Map.Entry hmArrListX = (Map.Entry)itmX.next();
            ArrayList cirX = (ArrayList) hmArrListX.getValue();
            System.out.println("Circles on the same X = " + hmArrListX.getKey());
            for (int i=0; i < cirX.size(); i++) {
                Circle c = (Circle) cirX.get(i);
              System.out.println("c.positionX = " + c.positionX + " c.positionY = " + c.positionY);         
            }
            System.out.println("");
        }

        System.out.println("");
        System.out.println("");

        Iterator itmY = hmY.entrySet().iterator();
        while (itmY.hasNext()) {
            Map.Entry hmArrListY = (Map.Entry)itmY.next();
            ArrayList cirY = (ArrayList) hmArrListY.getValue();
            System.out.println("Circles on the same Y = " + hmArrListY.getKey());
            for (int i=0; i < cirY.size(); i++) {
                Circle c = (Circle) cirY.get(i);
              System.out.println("c.positionX = " + c.positionX + " c.positionY = " + c.positionY);         
            }
            System.out.println("");
        }

        }
    }

    @Test
    public void test() {
        System.out.println("circles.length = " + circles.length);
        System.out.println("");
        showCenterSameHorizOrVert(circles);
    }

}

它会给我一个结果:

circles.length = 6

Circles on the same X = 1
c.positionX = 1 c.positionY = 2
c.positionX = 1 c.positionY = 5

Circles on the same X = 2
c.positionX = 2 c.positionY = 7

Circles on the same X = 3
c.positionX = 3 c.positionY = 8
c.positionX = 3 c.positionY = 5

Circles on the same X = 6
c.positionX = 6 c.positionY = 7



Circles on the same Y = 2
c.positionX = 1 c.positionY = 2

Circles on the same Y = 5
c.positionX = 1 c.positionY = 5
c.positionX = 3 c.positionY = 5

Circles on the same Y = 7
c.positionX = 6 c.positionY = 7
c.positionX = 2 c.positionY = 7

Circles on the same Y = 8
c.positionX = 3 c.positionY = 8

我使用X和Y的整数来简化打印输出,请告诉我您需要将其替换为双精度。我将结果存储在基于数组哈希码的HashMap中,以避免每次运行此函数时循环整个数组,并在其中循环整个数组仅一次,并根据X和Y坐标将所有值放入两个HashMaps中(它根据此键对所有值进行分组),然后我只是循环生成具有分组值的HashMaps,以显示基于X或Y的同一行中的哪些对象。希望我的逻辑能帮助您根据需要调整它。

 类似资料:
  • 考虑上图。我想要一个小精灵查询,返回所有在它们之间有多条边的节点,如图所示。 该图是使用neo4j cypher查询获得的:MATCH(d:dest)-[r]-(n:cust),其中d,n,count(r)作为常用返回d,n,按常用描述极限5排序 例如:在RITUPRAKA…和Asia之间有8条多条边,因此查询返回了2个节点和边,对于其他节点也是如此。 注意:图中有其他节点,它们之间只有一条边,这

  • 简而言之,我再次在网上找到了这个任务: 从键盘上输入整数,检查是否是质数。当你输入0时,程序结束。 到目前为止,我编写了检查整数是否为素数的逻辑。主要的问题是,我应该从一个字符串中读取几个整数,如果最后一个整数是0,就停止程序。所以,当我尝试添加循环来迭代输入并检查它们是否为整数素数时,我的逻辑不起作用,它只返回1个整数,没有其他整数。如果您有任何建议或批评,我将不胜感激,谢谢。

  • 问题内容: 考虑以下列表: 我该如何实现? 我试过了: 但是,只有当我按一定顺序具有元组的元素时,它才起作用,这意味着它将导致以下结果: 问题答案: 您可以将元组视为图形中的边,而将目标视为在图形中查找连接的组件。然后,您可以简单地遍历顶点(元组中的项),并为尚未访问的每个顶点执行DFS生成组件: 输出: 注意,在上面,组件和组件中的元素都是随机顺序。

  • 知道两个二进制文件是否相同(除了时间戳)的最简单方法是什么(在Ubuntu Linux上使用图形工具或命令行)?我不需要实际提取差异。我只需要知道他们是不是一样的。

  • 问题内容: 假设我们有一个简单的查询,如下所示: 如果结果集中只有一条记录,我想将变量设置为该值。如果我们有两个或多个记录,我希望结果用逗号和空格分隔。编写此T-SQL代码的最佳方法是什么? 例子: 1条记录的结果集: 2条记录的结果集: 3条记录的结果集: 问题答案: 这将为您提供以逗号分隔的列表中的值列表

  • 简而言之,我再次在网上找到了这个任务: 从键盘上输入整数,检查是否是质数。当你输入0时,程序结束。 到目前为止,我编写了检查整数是否为素数的逻辑。主要的障碍是,我应该从一个字符串中读取几个整数,如果最后一个整数是0,则停止程序。因此,当我试图添加一个循环来迭代输入并检查整数是否为素数时,我的逻辑不起作用,它只返回1个整数,没有其他整数。