如何从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:字节码和二进制有什么区别? - javajava字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…
合并两个HashTable并删除Java中的重复项 - java我有两个带有<int,string>对的哈希表。现在它们每个都有重复的值,我想合并两个哈希表以给我不同的值。我怎样才能做到这一点!?谢谢编辑#1我正在从目录中读取文件内容。并将这些内容作为令牌存储在两个不同的哈希表中。现在,我需要将它们合并到单个哈希表中,这将为我提供两个表的不同值。 参考方案 您可以使用putAll的Hashtable方法合并两…