如何从二维数组中获取第一列的内容 [英] How to get the first column's contents from a 2D array

查看:170
本文介绍了如何从二维数组中获取第一列的内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

How can I pull the first column from my 2D array? I am initialising my array in a method like this

//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;    

}

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

This is the contents of my test file. (Please bare in mind the file could be any length)

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

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

on the terminal but the problem is when I try to call the left column I am getting the right column. I am not sure if this is because the values on the right are the only ones getting stored or not.

      //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

谁能澄清我如何才能最好地从二维数组中获取左列的数据?或者是否有其他方法可以实现这种事情?

Can anyone clarify how I could best get the data on the left hand column from the 2D array ? Or if there is some other method for achieving this sort of thing?

推荐答案

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

You need to use the debugger on you IDE and step through your code to see exactly what is going on. The short answer to me looks like you are clobbering the same field with read data twice for k=0 and k=1.

编辑

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

Also in your update, I think you are looking for this in your second print loop (not that it matters, could just as easily be 2, but this is better IMO):

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

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

EDIT Here is the code I think you want explicitly:

//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 循环的东西:

Finally, Your array is initializing incorrectly, which is why you are having so much trouble: You are actually writing both values to the X component, so the first time you loop in k you write a the X value to i,j (eg data[0][0]) and print it out. The second time you loop k you write the Y value to the same i,j (eg data[0][0]) again and print it out. This looks like you are printing the array you want, but actually you are writing both values to the same column. You really want something without the k loop:

//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 列,例如:

If you want to enforce 2 columns which I think k is doing, something like:

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

count is also unnecessary as it is just a different way of controlling the total size of the array which it already handled / limited by looping each column (or in the second example where you know it is two wide) by the data.length / data[0].length

由 OP 添加的

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

To clarify for anyone who still does not get it who maybe is confused about the same thing I was: I misunderstood where the values were being stored so this is why I set the problem up wrong and none of the short answers were making any sense.

我从字面上理解了整个事情,假设值[here][] 保存了第一列中的值,而 value[][here] 保存了第二列中的值.

I took the whole thing a bit too literally, assuming that the value[here][] was holding the values from the first column and the value[][here] was holding the values from the second column.

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

I am not sure why I held onto this, but I think it has something to do with how I had been using 1D arrays (without needing to tell them to have a column).

这篇关于如何从二维数组中获取第一列的内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆