使用数组比较有序对并确定数学系统

时间:2011-03-23 00:57:03

标签: java

我正在编写一个程序,它接受有序对,并确定它们是自反,对称和传递...... 鉴于以下几点:(1,1)(1,2)(2,2)(4,4)(2,1)(3,3) 反身:所有这些都存在:(1,1)(2,2)(3,3)(4,4) 对称:如果存在(a,b)则存在(b,a) 及性:如果存在(a,b)和(b,c),那么(a,c)也必须存在...... 我遇到了问题,因为我开始使用链接列表但确定数组会更容易。有人告诉我使用Point []包,它会比并行数组更容易......这就是我所拥有的,我不确定它是否是正确的?我甚至无法将数字存储到我的阵列中!!请帮助!!!

/****************************************************************
* Name: Cheryl Minor        Date: March 8, 2011
*
* Program: Write a program that checks whether a relation R
*   is an equivalence relation. If R is an equivalence relation
*   the program outputs the equivalence classes of R.
****************************************************************/
import java.io.*;
import java.util.*;

public class Problem17 
{
static class Point{
    int x;
    int y;
}
public static void main(String []args)
{
    Point[] line = new Point[6];
    for(int i = 0; i<line.length; i++)
    {
        line[i] = new Point();
    }

    line[0].x = 1;
    line[1].x = 1;
    line[2].x = 2;
    line[3].x = 4;
    line[4].x = 2;
    line[5].x = 3;

    line[0].y = 1;
    line[1].y = 2;
    line[2].y = 2;
    line[3].y = 4;
    line[4].y = 1;
    line[5].y = 3;  

    System.out.println(line);   
   }
}

2 个答案:

答案 0 :(得分:0)

你可以写这样的东西。这个算法可以改进,但现在更具可读性:

Point[] list = new Point[5];
...
for (int i=0; i<list.length; i++) {
    // checking Reflexive
    if (list[i].x == list[i].y) System.out.println("Reflexive" + list[i]);
    for (int j=i+1; j<list.length; j++) {
        // checking Symmetric
        if (list[i].x == list[j].y && list[i].y == list[j].x) ...
        for (int k=j+1; k<list.length; k++) {
            // checking Transitive
            if (list[i].x == list[k].x && list[i].y == list[j].x && ...
        }
    }
}

小建议:

  • 添加构造函数Point(x,y)
  • 在Point()
  • 中添加toString

答案 1 :(得分:0)

所有计算机程序都有一个通用解决方案(又名:金色子弹):divide et impera(由罗马人发明)。

逐步解决您的问题。

......一个采用有序对的程序......给出以下几点:(1,1)(1,2)(2,2)(4,4)(2,1)(3,3)< / p>

我在这里有第一个不和谐。 :)