如何创建行和列的字符串索引表以及单元格的布尔值?

时间:2018-08-17 10:32:59

标签: java data-structures

我需要一个可以解决以下问题的Java程序:

1-它具有一个数据结构(DS)来表示以下数据,其中行和列由字符串索引,单元格值为布尔值。 enter image description here

因此,要访问第(i)行,我可以简单地说DS [“ Yi”]并访问第(i)行中的特定单元格(j),我可以说DS [“ Yi”,“ Xj”]

2-必须从类字段中填充列索引{“ X1”,“ X2”,“ X3”,...,“ Xn”}。例如,考虑以下类:

public class Test {
    private String X1;
    private String X2;
    private String X3;
    private String X4;
    private String X5;
}

对于这个类,我的表的列将是{“ X1”,“ X2”,“ X3”,“ X4”,“ X5”}},如果我以后更新类Test以包括更多字段,让我们说“ X6”,则DS必须自动添加此新字段。

3-最后,我想将这些数据保存到{TXT,XML或JSON}文件中,以便每次运行代码时,它都可以从文件中读取值。

2 个答案:

答案 0 :(得分:1)

我认为最简单的方法可能是要有一些约定,以便您可以在内部将已知的行和列标签转换为数字索引。然后,您可以使用普通的2D布尔数组。

如果您无法执行此操作,则一种选择是使用地图,如下所示:

Map<String, Map<String, Boolean>> grid = new HashMap<>();
// populate first row
grid.put("Y1", new HashMap<>());
grid.get("Y1").put("X1", true);
grid.get("Y1").put("X2", true);
grid.get("Y1").put("X3", false);
// ... other columns
grid.get("Y1").put("Xn", true);

答案 1 :(得分:1)

尝试使用这种方法。

N.B .:该代码未经测试。在这里,我在数组上都使用了int索引搜索,因为我假设列表"x1", "x2", "x3"不一定要排列(也许可以尝试使用Map

    public class SS {
    public static void main(String[] args) {
        //Used for indexing
        List<String> listX = Arrays.asList("x1", "x2", "x3");
        List<String> listY = Arrays.asList("y1", "y2", "y3");


        //Used to fetch boolean value which is indexed arr[x][y] with the value defined in the class YourClass
        YourClass[][] arr = new YourClass[listX.size()][listY.size()];
        int i=0;
        for (String y : listY) {
            int j=0;
            for (String x : listX) {
                //Fill the array
                arr[i][j] = new YourClass(new Random().nextInt(1), x, y);
                j++;
            }
            i++;
        }

        //To get DS["x2", "y3"]
        DS ds = new DS("x2", "y3");

        i=0;
        for (String y : listY) {
            if(ds.getY().equals(y))
            {
                int j=0;
                for (String x : listX) {
                    if(ds.getX().equals(x))
                        System.out.println(arr[i][j].toString());
                    j++;
                }
            }
            i++;
        }
    }
}

//class to maintain index positions
class YourClass{
    int a;
    String x;
    String y;

    public YourClass(int a, String x, String y) {
        this.a = a;
        this.x = x;
        this.y = y;
    }

    @Override
    public String toString() {
        return "YourClass{" +
                "a=" + a +
                ", x='" + x + '\'' +
                ", y='" + y + '\'' +
                '}';
    }

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public String getX() {
        return x;
    }

    public void setX(String x) {
        this.x = x;
    }

    public String getY() {
        return y;
    }

    public void setY(String y) {
        this.y = y;
    }
}

//class used to search the element
class DS {
    String x;
    String y;

    public String getX() {
        return x;
    }

    public void setX(String x) {
        this.x = x;
    }

    public String getY() {
        return y;
    }

    public void setY(String y) {
        this.y = y;
    }

    public DS(String x, String y) {
        this.x = x;
        this.y = y;
    }
}