java - 如何从二维数组中获取第一列的内容

标签 java arrays 2d

如何从二维数组中提取第一列?我正在用这样的方法初始化我的数组

//Initialise the array with the values from the file
public static float[][] data(float[][] data, Scanner scan){
    int count = 0; 

    for (int i=0;i<data.length;i++){
        for (int j=0;j<data[0].length;j++){
            count++;    
            if(count<data.length*data[0].length){
                for(int k=0;k<2; k++){

                    data[i][j] = (float)   IOUtil.skipToDouble(scan); 
                    System.out.print(data[i][j] + "  ");    
                }

            System.out.println();
            }   
        }

    }
    return data;    

}

这是我的测试文件的内容。 (请记住文件可以是任意长度)

13.97  2.2  
12.05  1.9  
9.99  1.5  
8.0  1.3  
6.0  0.9  
4.0  0.6  
2.0  0.3  
0.0  0.0  
-2.0  -0.3  
-4.0  -0.6  
-6.02  -0.9  
-8.0  -1.3  
-9.99  -1.6  
-12.03  -1.9  
-13.98  -2.2

在终端上,但问题是当我尝试调用左列时,我得到的是右列。我不确定这是否是因为右侧的值是唯一被存储或未被存储的值。

      //should print x but actually prints y 
   public static void printX(float[][] data){

        for (int i=0;i<data.length;i++){
            for (int j=0;j<data[0].length;j++){

                System.out.println(data[i][j]);
            }
        }
    }

输出

2.2
1.9
1.5
1.3
0.9
0.6
0.3
0.0
-0.3
-0.6
-0.9
-1.3
-1.6
-1.9
-2.2
0.0

任何人都可以澄清我如何最好地从二维数组中获取左侧列上的数据?或者是否有其他方法可以实现此类目标?

最佳答案

您需要使用 IDE 上的调试器并单步执行代码以准确了解发生了什么情况。对我来说,简短的回答看起来像是您在 k=0 和 k=1 的情况下两次读取数据来破坏同一个字段。

编辑

另外,在您的更新中,我认为您正在第二个打印循环中寻找这个(这并不重要,可以很容易地为 2,但在我看来这是更好的):

for (int j=0;j<data[i].length;j++){

编辑这是我认为您明确想要的代码:

//Only print X
public static void printX(float[][] data){

    for (int i=0;i<data.length;i++){
       System.out.println(data[i][0]);
    }
}

//Only print Y
public static void printY(float[][] data){
    for (int i=0;i<data.length;i++){
       System.out.println(data[i][1]);
    }
}

//Print both
public static void printBoth(float[][] data){
    for (int i=0;i<data.length;i++){
       System.out.println(data[i][0] + ", " + data[i][1]);
    }
}


//Print any number in array:
public static void printAll(float[][] data){
    for (int i=0;i<data.length;i++){
        for (int j=0;j<data[i].length;j++){
            System.out.print(data[i][j];
            if (j+1 < data[i].length) {
                System.out.print(", ");
            } else {
                System.out.println();
            }
        }
    }
}

最后,您的数组初始化不正确,这就是您遇到这么多麻烦的原因:您实际上将两个值写入 X 组件,因此第一次在 k 中循环时,您将 X 值写入 i,j (例如data[0][0])并打印出来。第二次循环 k 时,再次将 Y 值写入相同的 i,j(例如 data[0][0])并将其打印出来。这看起来像是您正在打印所需的数组,但实际上您正在将两个值写入同一列。你确实想要一些没有 k 循环的东西:

//Initialise the array with the values from the file
public static float[][] data(float[][] data, Scanner scan){
    int count = 0; 

    for (int i=0;i<data.length;i++){
        for (int j=0;j<data[0].length;j++){
            count++;    
            if(count<data.length*data[0].length){
                data[i][j] = (float)   IOUtil.skipToDouble(scan); 
                System.out.print(data[i][j] + "  ");
            }    
        }
        System.out.println();
    }
    return data;    
}

如果你想强制执行我认为 k 正在做的 2 列,例如:

public static float[][] data(float[][] data, Scanner scan){
    for (int i=0;i<data.length;i++){
        for (int j=0;j<2;j++){
            data[i][j] = (float)   IOUtil.skipToDouble(scan); 
            System.out.print(data[i][j] + "  ");
        }
        System.out.println();
    }
    return data;    
}

count 也是不必要的,因为它只是控制数组总大小的一种不同方式,它已经通过循环每一列来处理/限制(或者在第二个示例中,您知道它是两宽)由 data.length/data[0].length

编辑由OP添加:

为了向那些仍然不明白的人澄清,他们可能对与我相同的事情感到困惑:我误解了值的存储位置,所以这就是为什么我将问题设置错误并且没有一个简短的答案能够做出任何意义。

我对整个事情的理解有点过于字面意思,假设 value[here][] 保存第一列中的值,value[][here] 保存第二列中的值。

我不确定为什么我坚持这一点,但我认为这与我使用一维数组的方式有关(不需要告诉他们有一个列)。

关于java - 如何从二维数组中获取第一列的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14512407/

相关文章:

Java:将多个列表组合到一个列表中

java - 有什么更好的方法来检查 JdbcTemplate.batchUpdate 中名称字段、名称表的 SQL 注入(inject)?

java - 在 Freemarker 模板中检查 Spring 安全角色和记录的用户名

javascript - 根据数组的长度对 json 进行排序

arrays - 检查数组是否有值

javascript - 将对象转换为二维数组

c++ - 带余数的动态二维数组访问冲突

c++ - 填充二维数组随机整数相同的数字

在 C 中将二维数组中的单个元素复制并比较到另一个数组

java - Java中的Object类是什么?