2012-02-29 34 views
0

经过对这个和其他许多互联网社区的全面调查后,我未能解决我的问题。这是关于ControlP5按钮,我的目标是从以前格式化的文本文件导入二维数组,并且有两列19行和空格分隔的值。现在我的代码可以工作,但是我指定用来保存txt值的2D arrray不会获得所有值,而只是第一行中的最后一对值。我知道遍历所有值的循环,但只将它们存储在第一行。我不知道如何将它推到另一排阅读。这是我的代码:通过按钮和.txt文件输入二维数组处理Java

if(theEvent.isController()) 
{ 
    if(theEvent.controller().name() == "mean shape males") 
    { 
     String loadPath1 = selectInput(); 
     reader = createReader(loadPath1); //new BufferedReader 
     int x=0; //rows 
     int y=0; //columns 
     String smaLine; 
     try 
     { 
      while ((smaLine = reader.readLine()) != null) 
      { 
       String[] values = smaLine.split(", "); 
       for(int i = 0; i < values.length; i++) 
       { 
        float[] testC = float(split(values[i], " ")); 
        for (int j = 0; j < testC.length; j++) 
        { 
         mat1[j][i] = testC[j]; //THIS IS THE PROBLEMATIC MATRIX 
        } 
       } 
       x = x+1; 
      } 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     mat1max = maxRet(mat1); 
     mat1min = minRet(mat1); 
     inputMat = new Grid(2,19,10,130,22,mat1,mat1min,mat1max); 
    } 
} 

我用所有的意见,我能找到的堆栈溢出主要是从这个职位How to print 2D Array from .txt file in Java但我不能老是似乎给读者移动到其他然后行第一。

+0

您需要:a)用'println(...)'调用代码来检查变量的状态,并帮助您找出错误的位置,或者使用调试器,或者使用调试器)改进了你的代码格式,因为它非常难以阅读全部左对齐。运气。 – 2012-02-29 13:40:24

+1

对于每一行输入,您重置'mat1 [j] [i]'的元素,写入您之前读取的数据。这是故意的吗? – Joni 2012-02-29 13:44:52

+0

你如何初始化mat1? – Churk 2012-02-29 13:46:10

回答

1

我猜测,而不是重新设置在mat1的元素要创建的每行一个新的矩阵,并将它们存储在某种类型的列表。这是你会如何做:

List<?> matrices = new ArrayList<?>(); 
while ((smaLine = reader.readLine()) != null) 
{ 
    float[][] mat = new float[MATRIX_ROWS][MATRIX_COLUMNS]; 
    String[] values = smaLine.split(", "); 
    for(int i = 0; i < values.length; i++) 
    { 
     float[] testC = float(split(values[i], " ")); 
     for (int j = 0; j < testC.length; j++) 
     { 
      mat[j][i] = testC[j]; 
     } 
    } 
    matrices.add(mat); 
    x = x+1; 
} 

当使用x,顺便说一下?

+0

X只是一个剩余物,不会在任何地方使用,我只是忽略它。仍然ArrayList不做所需的事情,因为我需要浮动[] []类型数组 – 2012-03-06 15:11:21

+0

只有一个浮动[] []?但是如果我理解正确的话,你输入的每一行应该产生一个float [] []。你如何将它们合并成一个? – Joni 2012-03-07 09:49:34

0

交换你的mat1[j][i] = testC[j]mat1[i][j] = testC[j]

+0

我试过这个,但它打印出两个垂直列,即mat1 [1] [1]和mat1 [2] [1]中的值代替mat1 [1] [ 1]和mat1 [1] [2]。 – 2012-03-06 15:12:48