-1

我正在创建一个程序,它将读取一个 txt 文件(从另一个主 txt 文件),获取作为一堆字母(@-K)的字符串,然后用字符串中字符的 ASCII 值填充一个二维数组. 所以我已经成功创建了二维数组并读取了文件。问题是我的数组仅由字符串文件的第一个字母填充,而不是通过整个文件。我有一个 if 语句,我认为应该通读文件并正确填充它,但它没有这样做。无法弄清楚我做错了什么。这是代码。

     public static void main(String[] args) throws IOException 
  {
    String txtfile;
    String txtfilecontents;
    int matrix[][]= new int [24][34];
    int row=0;
    int col=0;
    BufferedReader masterfile = new BufferedReader(new FileReader("imageFileList.txt")); 
    while((txtfile=masterfile.readLine())!=null)                                              //reads master text file
    {
      BufferedReader imagefile= new BufferedReader(new FileReader(txtfile));
      while((txtfilecontents=imagefile.readLine())!=null)                                     //reads text file within master file
      {
        for(int i=0;i<txtfilecontents.length();i++)                                           
        {
          if(col ==34)
          {
            col = 0;
            row++;
          }
          if(row ==24)
          {
            col=0;
            row=0;
            break;
          }
          matrix[row][col] = (int)txtfilecontents.charAt(i)-64;                                  //instead of adding every character it only adds the first one until it fills up the 2d array
          col++;
        }
        System.out.println(txtfilecontents);
        for(row=0;row<24;row++)
        {
          for(col=0;col<34;col++)
            System.out.printf("%4d",matrix[row][col]);
          System.out.println();
        }
      }

      System.out.println(txtfile);
    }


  }   

这是 txtfile 中包含的内容的示例。

AKHIICG@KDHDJKGHHHFGECEGHEIEHDCBF@DB@DDIABHI@GHAFAFHEGCECEJ@GHKJCBGFFFH@IB@JB@KKBFAGABCJHJ@AEDIABGI@DDCJHCAK@@FBKHGB@KFI@KKEJCJFHBDAJBAJKCGEE@DFDBBD@GDEIJAIKBHCDH@AAJK@EJHEGGKGJEJ@@F@@AGDFECCFIFHDEGHBJCABEKBFIIEBJGFHKJJFKFKDEKHBBEIBAHBGKDHKFKCAEJFDHEHK@@AIIBF@EEBB@BEGEBIKDJGKEJKHKHAJJDGFKFGIKI@ECH@FBEEGKDACKGHAIBCJGDJCEKD@K@AGGHGACHCE@HCEDI@FDJDGIJAJFCEFHEBDBGIIGJAFEGGFHJBIHBICB@EDDFEDFBKACJ@JCKKAKEJACICEBIJEFIICH@J@CCE@EJI@BKEFAGAJKKEDHICC@@@DJEGIHFDHDCJGJECHGCBIHC@K@FEHECEKKJAABFAAFA@EHFBFAEHBFCEFDBDKCB@BFGBBKG@@GKBKJEHI@H@DH@IJ@FFICEDBDJECA@@DKHAIFJII@DDEBI@IGIFJ@@BFC@IHGCJEAG@CAF@CCFEC@AFKDDKKAD@K@HDBDAIDIKCGJJGEECGIIECDGDHHBC@FJDGJJDB@AKBBGEEIFK@D@BCCG@IAEJEECDCFBBE@AK@EAEDGCEKIBDKHICG@DFDDGJGHGDE@CGIEAEEHBKFCBICDGADBHDEABJGHCEIDDJD@BEEJA@JFB@IFGDA@GAGDAEDBDCFGKEJEDDKFCE@FHJIB@JDAEECHBJCDAEFAHBDJC@FH

此外,我在文件中添加了一堆打印语句,这样我就可以看到我的输出是什么,但稍后会被删除。

4

2 回答 2

0
    for(int i=0;i<txtfilecontents.length();i++)                                           
        {
          for(row=0;row<24;row++)
            for(col=0;col<34;col++)
              matrix[row][col] = (int)txtfilecontents.charAt(i);                              //instead of adding every character it only adds the first one until it fills up the 2d array
        }

您正在用 charAt(i) 填充矩阵,所以最后,矩阵将用字符串中的最后一个字符填充

尝试这样的事情:

row = 0; 
col = 0;
for(int i=0;i<txtfilecontents.length();i++)                                           
{
    //Insert the char into the matrix
    matrix[row][col] = (int)txtfilecontents.charAt(i);

    //Move the matrix position for the next character
    row++;
    if (row >= 24){
        row = 0;
        col++;
        if (col >= 34){
            System.out.println("Matrix out of space");
        }
    }
}
于 2013-10-28T01:43:39.523 回答
0

循环

for(int i=0;i<txtfilecontents.length();i++)                                           
        {
          for(row=0;row<24;row++)
            for(col=0;col<34;col++)
              matrix[row][col] = (int)txtfilecontents.charAt(i);                              //instead of adding every character it only adds the first one until it fills up the 2d array
        }

在每个位置保存角色。您需要计算要保存的地址,而不是绕过内部 for 循环。或者也许更新i最内层循环中的计数器,并设置一个标志以在到达字符串末尾时中断。

第一种方法的示例(已编辑 - 没有增加 col

row=0;col=0;
for(int i=0;i<txtfilecontents.length();i++)                                           
    {
         if (col == 34) {
            col=0; row++;
         }
    if (row==24) break;
    matrix[row][col] = (int)txtfilecontents.charAt(i);        
    col++; // <<<<< added this line!!                      
    }
于 2013-10-28T01:45:11.450 回答