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

如何从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

谁能澄清我如何最好地从2D数组中获取左侧列上的数据?还是如果有其他方法可以实现这种目标?

参考方案

您需要在IDE上使用调试器,并逐步检查代码以查看发生了什么。对我的简短回答似乎是您用k = 0和k = 1两次破坏了读取数据的同一字段。

编辑

同样在您的更新中,我认为您正在第二个打印循环中寻找它(这并不重要,可以很容易地等于2,但这是更好的IMO):

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(例如)并打印出来。第二次循环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;    
}

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

编辑由OP添加:

为了澄清仍然无法理解的人,我可能对我是同一件事感到困惑:我误解了存储值的位置,因此这就是为什么我将问题设置为错误,并且所有简短答案都没有任何意义。

假设value [here] []持有第一列的值,而value [] [here]持有第二列的值,我从字面上看了整个事情。

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

Spring Data Cassandra的事务管理 - java

我正在使用Spring和Cassandra作为基础数据库。曾提到过弹簧伞项目“ spring data cassandra”。与休眠不同,在这里无法找到如何管理事务。如果您中的某些人已经合并,请共享要包含的事务管理器的详细信息。 参考方案 Cassandra不支持传统(ACID)的事务。在某些特殊情况下,可以通过一些构造来实现事务原子性,例如原子批处理(请参…

Java中的“ <<”运算符 - java

最喜欢的语句来自Java的Character类:(1 << Character.PARAGRAPH_SEPARATOR)) >> type PARAGRAPH_SEPARATOR是字节,type是整数。这句话中的操作员,他们做什么?如何以及在哪里可以使用这些运算符?这是oracles java.lang.Character文档。该类中…

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

合并两个HashTable并删除Java中的重复项 - java

我有两个带有<int,string>对的哈希表。现在它们每个都有重复的值,我想合并两个哈希表以给我不同的值。我怎样才能做到这一点!?谢谢编辑#1我正在从目录中读取文件内容。并将这些内容作为令牌存储在两个不同的哈希表中。现在,我需要将它们合并到单个哈希表中,这将为我提供两个表的不同值。 参考方案 您可以使用putAll的Hashtable方法合并两…