2014-11-28 3 views
1

Я как бы застрял в этом алгоритме. У меня есть эта функция ниже, которая получает строку и матрицу [n] [m]. Строка имеет до n * m цифр, и мне нужно вставить их, обратившись от последней цифры к последней ячейке матрицы, соответственно, до тех пор, пока не дойду до первой ячейки;Вставить строку чисел в матрицу

Например: String = '3' будет таким, как {[0] [0], [0] [3]}; String = '123' будет таким, как {[0] [1], [2] [3]}; и String = '2222' будет таким, как {[2] [2], [2] [2]};

Вопрос: Для строки '123' я получаю матрицу {[1] [1], [1] [1]}. Кажется, что только первая цифра вставляется в матрицу.

stringToInteger(String correctBase, int [][] board) 
{ 
    int integerNum; 

    for(int i=correctBase.length()-1; i>=0; i--)   
    { 
     integerNum=correctBase.charAt(i)-'0';    
     for(int row=board.length-1; row>=0; row--)  
      for(int col=board[row].length-1; col>=0; col--) 
       board[row][col]=integerNum; 
    } 
+0

так в чем проблема? – SMA

+0

Что это плохо работает. Для String '123' я получаю матрицу {[1] [1], [1] [1]}. Кажется, что только первая цифра вставляется в матрицу. – user3075653

ответ

1

Попробуйте это:

stringToInteger(String correctBase, int [][] board) 
{ 
    int integerNum; 
    int row = board.length - 1; 
    int col = board[0].length - 1; 

    for(int i=correctBase.length()-1; i>=0; i--)   
    { 
     integerNum=correctBase.charAt(i)-'0'; 
     board[row][col]=integerNum; 
     col--; 
     if(col < 0) { 
      col = board[0].length - 1; 
      row--; 
     } 
    } 
    ... 
} 
+0

Вы просто забыли это внутри цикла for: integerNum = correctBase.charAt (i) - '0'; – user3075653

0

Да, или:

int i = correctBase.length(); 
    for(int row=board.length-1; row>=0; row--)  
     for(int col=board[row].length-1; col>=0; col--) 
      board[row][col] = i > 0 ? correctBase.get(--i)-'0' : 0; 
0

Я бы сначала проверить, если размер строки совпадает с размером матрицы. Если это не так, то введите строку с нулями. Затем просто проанализируйте позиции строки и вставьте их в матрицу.

Попробуйте это.

public static void main(String[] args) { 
    //define size of matrix 
    int n = 2; 
    int m = 2; 

    String input = "3"; 

    //if size of string is less than matrix size we append 0 to it 
    if (input.length() < n * m) { 
     int diff = n * m - input.length(); 

     for (int i = 0; i < diff; i++) 
      input = "0" + input; //pad zeroes to the string 
    } 

    int board[][] = new int[n][m]; //declare matrix 

    //populate matrix 
    int stringPosition = 0; //position in the string starting from the left 
    for (int i = 0; i < n; i++) { 
     for (int j = 0; j < m; j++) { 
       board[i][j] = 
         Character.getNumericValue(input.charAt(stringPosition)); //transfrom char to int, then assign it to matrix 
      stringPosition++; //increment position 
     } 
    } 

    //display matrix 
    for (int i = 0; i < n; i++) { 
     for (int j = 0; j < m; j++) { 
      System.out.println("board[" + i + "][" + j + "] = " + board[i][j]); 
     } 
    } 
} 

Он производит желаемых результатов

input="3" 

board[0][0] = 0 
board[0][1] = 0 
board[1][0] = 0 
board[1][1] = 3 


input="123" 

board[0][0] = 0 
board[0][1] = 1 
board[1][0] = 2 
board[1][1] = 3 


input="2222" 

board[0][0] = 2 
board[0][1] = 2 
board[1][0] = 2 
board[1][1] = 2 
Смежные вопросы