【问题标题】:Define dynamically event handler in Java在 Java 中动态定义事件处理程序
【发布时间】:2013-11-07 15:24:51
【问题描述】:

假设我在 Java 中定义了两个数组。第一个数组有m 单元格,第二个有n 单元格。假设每个单元格可以有一个0 或1 值。

在这个程序中,第一个数组的每个单元格都将连接第二个数组的一个单元格,但我们不知道哪个单元格将连接到第二个数组的哪个单元格(这种连接是完全合乎逻辑的,例如我们只是知道array1[3] 与array2[7] 相关)。

所以现在我想为这些关系中的每一个定义一个事件处理程序,所以当其中一个单元格从 1 波动到 0 时,它的配对单元格也会波动。实际上我想以运行时和动态的方式定义事件处理程序,因为在此之前,我不知道array1 中的哪个单元格将与array2 中的哪个单元格配对。

有什么解决办法吗?

如果您认为我可以在没有动态事件处理程序的情况下解决此问题,请告诉我您的解决方案。

【问题讨论】:

  • 您不能使用 Java 中的事件处理程序监听数组修改。
  • 你的意思是没有办法跟踪数组单元格的变化?当单元格的值发生变化时,我们不能定义事件处理程序来通知我们吗?
  • 不。您必须使用事件处理程序创建自己的对象,并使用两个列表来收集您想要的任意数量的对象。

标签: java arrays events event-handling


【解决方案1】:

这是一种无需使用事件处理程序即可解决此问题的方法。看看这是否适用于您正在做的事情。

首先,我们使用两个二维数组,而不是两个数组,m x 1 和 n x 1。

int[][] array1 = new int[m][];
int[][] array2 = new int[n][];
for (int i = 0; i < m; i++)
    array1[i] = new int[] { /* your code */ ? 1 : 0 };
for (int i = 0; i < n; i++)
    array2[i] = array1[ /* your code */ ];

第一个/* your code */ 是您选择将1 或0 放入array1 的每个元素的条件。第二个/* your code */ 是您确定array1 的哪个元素对应array2 的每个元素的方法。

现在array2 中的每个元素也是array1 的元素,因此当您将其中一个数组中的值从0 更新为1 时,它也会在另一个数组中更新。

array2[7] = array1[3];
array1[3][0] = 0;
System.out.println(array2[7][0]); // prints "0"
array1[3][0] = 1;
System.out.println(array2[7][0]); // prints "1"

【讨论】:

  • 我认为你的解决方案就是我的答案,你能详细描述一下你的答案吗?我不知道我应该写什么而不是/*your code*/...你能帮我理解吗??
  • @Chavoosh 我已将解释添加到答案中。我不能告诉你写什么来代替/* your code */的原因是你没有告诉我们你如何决定哪些元素是1或0,或者你如何选择@987654340元素之间的对应关系@ 和 array2.
  • 感谢亲爱的@Nathaniel 的回复...我还有一个问题,在for 部分,您在定义二维数组时使用array1 和array2 一个[],什么这是什么意思?
  • 亲爱的@Nathaniel,我不知道该如何感谢你。终于我明白了你所说的,它有效!非常感谢.....只是另一件事,每次我更改array1 中的单元格的值时,array2 中的配对单元格都会更改,现在我如何找出array2 中的哪个单元格更改了正是那个时候?
  • @Chavoosh 您可能已经知道,Java 中的二维数组只是数组的数组。当您更改 array1 中条目 j 的值时,array2 中更改的条目将是您的分配 array2[i] = array1[j]; 中的条目 i。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多