0

プロジェクトの計算に問題があります。

私のプロジェクトは、一連の要素とその関係を読み取るプログラムを作成することです。入力データはテキスト ファイルから取得されます。(関係の設定)。

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

テキスト ファイルをプログラムに読み込むのは問題ありませんが、リレーションを 2 次元配列に入れようとすると行き詰まります。

例えば:{(1,1),(2,2),(3,3),(1,2),(1,3),(2,3)}

2 次元配列は次のようにする必要があります。

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

テキストファイルにはいろいろな関係があるので、1つを2次元配列に設定する方法がわかりません。

これは私のコーディングです。

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)};

4

2 に答える 2

1

ヒント:

たとえば、セットが , のような{b,c,e}関係をどこかに保存したい場合は、その要素を に保存してから method を使用できます。elemnt <-> indexb<==>0c<==>1e<==>2ListindexOf()

私はこのようなことを意味します

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 

あとは、それを使用して配列を作成する方法を理解する必要があります。

于 2012-06-16T21:35:47.063 に答える
1

したがって、入力の解析と配列の設定という 2 つの問題があります。

入力を解析するには、与えられた形式について考えてください。開き中かっこ、一連の順序付けられたペア、そして閉じ中かっこ。次の疑似コードについて考えてみてください。

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;
于 2012-06-16T20:31:10.477 に答える