如何将关系输入二维数组?

时间:2012-06-16 20:21:26

标签: java

我的项目数学有问题。

我的项目是编写一个程序来读取一组元素及其关系。您的输入数据将来自文本文件。 (SetRelation)。

{1,2,3} {(1,1),(2,2),(3,3),(1,2),(1,3),(2,3)}

将文本文件读入程序时没有问题但是当我想尝试将关系放入二维数组时我就陷入困境。

例如:{(1,1),(2,2),(3,3),(1,2),(1,3),(2,3)}

二维数组必须是这样的:

col[0][1][2]
[0] 1  1  1
[1]    1  1
[2]       1

我不知道如何将一个设置为二维数组,因为文本文件中存在各种关系。

这是我的编码。

import javax.swing.*;
       import java.util.ArrayList;
       import java.io.*;
       import java.util.StringTokenizer;
       import java.lang.*;
       import java.util.*;

       public class tests 
       {
          public static int s1[][];
          public static int s2[][];
          public static int s3[][];
          public static int s4[][];
          public static int s5[][];
          public static int s6[][];
          public static int s7[][];
          public static int s8[][];
          public static int s9[][];
          public static int s10[][];

    public static void main(String[] args) throws IOException, FileNotFoundException
    {
        BufferedReader infile = null; 

        ArrayList arr1 = new ArrayList();
        ArrayList arr2 = new ArrayList(); 
        ArrayList arr3 = new ArrayList();
        ArrayList arr4 = new ArrayList();
        try
        {
              infile = new BufferedReader (new FileReader ("numbers.txt"));

              String indata = null;

              while ((indata = infile.readLine())!= null) 
              {
                     StringTokenizer st = new StringTokenizer(indata," ");
                     String set = st.nextToken();
                     arr1.add(set);
                     String relation = st.nextToken();
                     arr2.add(relation);
              } 

              for(int i =0; i < arr2.size(); i++)
              {
                  String r = arr2.get(i).toString();
                  String result = r.replaceAll("[{}(),; ]", "");
                  arr3.add(result);
              }

              for(int i = 0; i < arr3.size(); i++)
              {
                  System.out.println(arr3.get(i).toString());
              }

              for(int i =0; i < arr1.size(); i++)
              {
                  String s = arr1.get(i).toString();
                  String result = s.replaceAll("[{}(),; ]", "");
                  arr4.add(result);  
              }

              int set1 = Integer.parseInt(arr4.get(0).toString());
              String ss1 = arr4.get(0).toString();
              int a = ss1.length();
              s1 = new int[a][a];
              int sA[][];
              /*for(int row=1;row< a;row++)
              {
                  for(int col=0;col < a;col++)
                  {
                      sA = new int[row][col];
                      int firstNo = Integer.parseInt(arr3.get(row).toString());
                      int secondNo = Integer.parseInt(arr3.get(col).toString());
                      sA = new int [firstNo][ secondNo] ;  

                      System.out.print(sA);
                  }
                  System.out.println();
              }*/
              char arrA;
              char indOdd=' ',indEven=' ';
                 char[] cArr = arr3.get(0).toString().toCharArray();
                 //System.out.println(arr3.get(0).toString().length());
                 int l = arr3.get(0).toString().length();
                 int arr10[][] = new int[(l/2)][2];

                    for(int i=0;i< 2;i++)
                    {
                        for(int row = 0; row < (l/2);row++)
                        {
                            for(int gh = 0;gh < l;gh++)
                            {
                                if(i%2==0)
                                {
                                indEven = cArr[gh];
                                System.out.println(indEven);
                                arr10[row][i] = indEven;
                                //System.out.println(arr10[row][i]);
                                //row++;
                            }
                            else
                            {
                                indOdd = cArr[gh+1];
                                System.out.println(indOdd);
                                arr10[row][i] = indOdd;
                                //row++;
                            }
                         }
                        }
                            //arr10 = new int[indOdd][indEven];
                            //System.out.println(arr10);
                    }         

        }
        catch (FileNotFoundException fnfe)
        {
               System.out.println("File not found");
        }
        catch (IOException ioe)
        {
               System.out.println(ioe.getMessage());
        }
        catch (Exception e)
        {
               System.out.println(e.getMessage());
        }

        infile.close();


    }
}

但是,如果关系是{(a,b),(a,c),(b,a),(b,c),(c,c)};{(33,33),(45,45),(67,67),(77,77),(78,78)};

,我就会陷入如何将一个设置为二维数组的问题

2 个答案:

答案 0 :(得分:1)

所以,你有两个问题:解析输入和设置数组。

要解析输入,请考虑您给出的格式。一个开口的大括号,一堆有序的对,然后是一个右大括号。想想这个伪代码:

Read in a left curly brace
While the next character is not a right curly brace{
    Read in a left parenthesis
    Get the first number and put it in a variable!
    Read in a comma
    Get the second number and put it in a variable!
    Read in a right parenthesis
    Store your relation in the array!
}

现在您的问题是如何将其放入数组中。您的关系几乎已经成为网格的索引!注意0索引,因此只需从两者中减去1,并将结果坐标设置为1。

array[first number-1][second number-1]=1;

答案 1 :(得分:1)

只是提示:

如果你的集合是{b,c,e},并希望存储某个地方存储关系elemnt <-> index,例如b<==>0c<==>1e<==>2,则可以将这些元素存储在List然后使用方法indexOf()

我的意思是这样的

List<String> list=new ArrayList<String>();
list.add("b");
list.add("c");
list.add("e");
System.out.println(list.indexOf("c"));//return 1
System.out.println(list.indexOf("e"));//return 2
System.out.println(list.indexOf("b"));//return 0 

现在您只需要弄清楚如何使用它来创建阵列。