如何将N个元素相互链接?

时间:2016-04-28 05:45:36

标签: java file-handling custom-data-type

我想将N个元素相互链接。这意味着元素1将与元素1,元素2,元素3 ......元素N具有特定的值关系。类似地,元素2将具有与元素1,元素2,元素3 ...等的值关系。 。 此外,我想将所有这些值存储在文件中并定期修改它。我更喜欢用Java编码。

这个问题的完美解决方案是什么?

请帮助我,我很震惊。

1 个答案:

答案 0 :(得分:0)

你有一个网格。每个元素与每个其他元素具有关系值,即存在(元素个数)^ 2个关系值。

我会使用一个数组。然后序列化数组以将其保存为文件,对其进行反序列化以加载它,编辑它然后重新序列化。

这里有一些要保存到文件并返回的java代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Arrays;

public class Grid {

    public static void main(String[] args) throws Exception {

        // your data grid
        int num_elements=10;
        double[][] grid=new double[num_elements][num_elements];

        // populate the grid
        // note grid[m][n] holds the value for the relationship
        //  between element m and element n
        grid[0][0]=1.0;
        grid[0][1]=0.5;
        // etc...

        System.out.println(Arrays.deepToString(grid));

        // save the grid
        write_object(grid, "grid.data");

        // clear the grid (eg happens when you rerun your program)
        grid=null;

        // load the grid
        grid=(double[][])read_object("grid.data");
        System.out.println(Arrays.deepToString(grid));

        // do some changes
        grid[0][0]=2.0;
        grid[0][1]=1.5;
        // etc...

        // save the grid (again)
        write_object(grid, "grid.data");

        // and so on

    }


    public static void write_object(Object no, String nfilename) {
        try {
            File f=new File(nfilename);
            if (f.exists())
                f.delete();
            FileOutputStream fos=new FileOutputStream(nfilename);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(no);
            oos.close();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static Object read_object(String nfilename) {
        try {
            FileInputStream fis=new FileInputStream(nfilename);
            ObjectInputStream ois = new ObjectInputStream(fis);
            Object o=ois.readObject();
            ois.close();
            return o;
        }
        catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

}