Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用2d数组java进行逻辑运算?_Java_Arrays_Javafx - Fatal编程技术网

如何使用2d数组java进行逻辑运算?

如何使用2d数组java进行逻辑运算?,java,arrays,javafx,Java,Arrays,Javafx,我正在开发一个JavaFX程序,它读取数据文件并开始处理列 到目前为止,我正在读取文件,然后循环遍历每一列,构建一个二维数组 这样我可以计算平均值和中值。 但我想知道如何在java中对这些列进行逻辑操作 假设我们有一个包含以下列和行的文件,在本例中,假设文件中的元素用逗号分隔(但它们可能不是) 现在,用户希望找到满足以下条件的所有行: V1 > 2 AND V2 < 3 OR V3 < 4 欢迎任何帮助 只需像您所说的那样读取数组中的文件,然后在数组中迭代,并检查给定的条件例

我正在开发一个JavaFX程序,它读取数据文件并开始处理列

到目前为止,我正在读取文件,然后循环遍历每一列,构建一个二维数组

这样我可以计算平均值和中值。 但我想知道如何在java中对这些列进行逻辑操作

假设我们有一个包含以下列和行的文件,在本例中,假设文件中的元素用逗号分隔(但它们可能不是)

现在,用户希望找到满足以下条件的所有行:

V1 > 2 AND V2 < 3 OR V3 < 4

欢迎任何帮助

只需像您所说的那样读取
数组中的
文件
,然后在
数组
中迭代
,并检查给定的条件

例如,您最好使用一些解析器支持 你可以这样写:

 exp = parser.parseExpression("v[0] > 2 AND v[1] < 3 OR v[2] < 4");
 System.out.println(exp.getValue(v,Boolean.class));
public interface Criterion {

    public boolean matches(Map<String, Integer> data) ;

}
exp=parser.parseExpression(“v[0]>2和v[1]<3或v[2]<4”);
System.out.println(exp.getValue(v,Boolean.class));

其中v是2d数组的一行,索引从0开始。

这个问题对于本论坛来说实在太广泛了,但我会通过为筛选数据的标准创建一个小对象模型来解决这个问题。比如:

 exp = parser.parseExpression("v[0] > 2 AND v[1] < 3 OR v[2] < 4");
 System.out.println(exp.getValue(v,Boolean.class));
public interface Criterion {

    public boolean matches(Map<String, Integer> data) ;

}
公共接口标准{
公共布尔匹配(地图数据);
}

公共类不平等实现了标准{
公共枚举操作{小于,大于}
私人最终运营;
私有最终字符串变量;
私有最终整数值;
公共标准(操作op、字符串变量、int值){
this.op=op;
this.variable=变量;
这个值=值;
}
@凌驾
公共布尔匹配(地图数据){
如果(!data.containsKey(变量)){
返回false;//或引发异常。。。
}
int dataValue=data.get(变量);
开关(操作){
大小写小于:返回数据值<值;
大小写大于:返回数据值>值;
默认值://抛出异常。。。
}
}
}
然后将这些类组合起来:

public class And implements Criterion {
    private Criterion left ;
    private Criterion right ;

    public And(Criterion left, Criterion right) {
        this.left = left ;
        this.right = right ;
    }

    @Override
    public void matches(Map<String, Integer> data)  {
        return left.matches(data) && right.matches(data);
    }
}
公共类和实现标准{
私人标准左;
私权;
公共和标准(左、右){
this.left=左;
这个。右=右;
}
@凌驾
公共无效匹配(地图数据){
返回left.matches(数据)和right.matches(数据);
}
}
对于
也同样如此


现在,根据您对UI的描述,创建表示UI状态的
标准
对象应该非常简单。然后只需将表的每一行(表示为从变量名到值的映射)通过
标准
匹配方法传递,返回true的是匹配过滤器的行。

这里是一个可以使用的快速方法

你的比较很奇怪<代码>V1>2和V2<3或V3<4

publicstaticvoidmain(字符串[]args)
{
//此处的TODO代码应用程序逻辑
字符串[]linesFromFile={“1,4,1,4”,
"2, 5, 2, 4",
"3, 2, 3, 5",
"4, 3, 4, 2"};
List saveTrueDataHere=new ArrayList();
对于(int i=0;i2&&Integer.parseInt(项[1])<3 | | Integer.parseInt(项[2])<4;
}

当出现像V1&(V2 v V3)这样的操作时,您如何管理?感谢毫无理由的否决票。这个问题对于本论坛来说似乎太广泛了。你到底被困在这里的是哪一部分?用户是如何为数据指定过滤条件的?我被解析部分卡住了,在解析部分中,用户选择要从中获取数据的列,然后程序打印出符合条件的所有行。如示例所示,用户希望找到符合条件的所有行。在这种情况下,V1>2,V2<3,V3<4。用户可以在列上进行和/或操作。但您也可以构建一个GUI,允许用户构建不需要解析的表达式……目前它的工作方式如下:程序读取文件。从该文件中,用户将获得标题,例如可以使用的列名。然后,要过滤列,用户可以选择要使用的列名,选择>或<并输入列值。然后有一个按钮以同样的方式添加更多表达式和操作。她只能做和/或手术,而且可以做任何她喜欢的手术。我试试看。V1、V2等只是默认的列名。例如,重点是查找高度>150或宽度<100。其中V1=高度,V2=宽度。谢谢,我会试一试这对我帮助很大!非常感谢。我修改了一位并添加了更多的操作数。使用地图使事情变得容易一些。但将文件数据存储到地图上是否是一种良好的做法?目前,我使用
Map
将列值存储到列表中,并且可以通过键(作为标题)轻松访问。
public class And implements Criterion {
    private Criterion left ;
    private Criterion right ;

    public And(Criterion left, Criterion right) {
        this.left = left ;
        this.right = right ;
    }

    @Override
    public void matches(Map<String, Integer> data)  {
        return left.matches(data) && right.matches(data);
    }
}
public static void main(String[] args)
{
    // TODO code application logic here
    String[] linesFromFile = {"1, 4, 1, 4",               
                              "2, 5, 2, 4",
                              "3, 2, 3, 5",
                              "4, 3, 4, 2"};

    List<String> saveTrueDataHere = new ArrayList();

    for(int i = 0; i < linesFromFile.length; i++)
    {
        System.out.println(linesFromFile[i] + ": " + compareItemsInLine(linesFromFile[i]));
        if(compareItemsInLine(linesFromFile[i]))
        {
            saveTrueDataHere.add(linesFromFile[i]);
        }
    }

    System.out.println("Number of true items saved: " + saveTrueDataHere.size());
    //Print the items that returned true.
    for(String item : saveTrueDataHere)
    {
        System.out.println(item);
    }
}  

static boolean compareItemsInLine(String line)
{
    String items[] = line.split(", ");

    //                         v1                                v2                                 v3
    return Integer.parseInt(items[0]) > 2 && Integer.parseInt(items[1]) < 3 || Integer.parseInt(items[2]) < 4;
}