2016-08-10 3 views
1

Я хочу избавиться от нуля в моем методе. Кто-нибудь знает как это сделать? Должен ли я преобразовать матрицу в строку или я могу просто удалить элементы каким-то образом в матрице целых чисел?Удалить целые числа в матрице

Отсюда:

1 0 0 0 0 

1 1 0 0 0 

1 2 1 0 0 

1 3 3 1 0 

1 4 6 4 1 

К этому:

1 

1 1 

1 2 1 

1 3 3 1 

1 4 6 4 1 

public static void writeElement(int[][] m){ 
    int[][] b = new int[m.length][m.length]; 
    for(int row=0; row<m.length; row++){ 
    b[row][0] = 1; 
    } 
    for(int col=1; col<m.length; col++){ 
    b[0][col]=0; 
    } 
    for(int row=1; row<m.length; row++){ 
    for(int col=1; col<m[row].length; col++){ 
     b[row][col] = (b[row-1][col-1] + b[row-1][col]); 
    } 
    } 
    for(int i=0; i<b.length; i++){ 
    for(int j=0; j<b[i].length; j++){ 
     System.out.print(b[i][j] + " "); 
    } 
    System.out.println(); 
    } 
}//writeElement 
+0

Что именно вы пытаетесь достичь? Вы хотите просто не печатать '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' или вы хотите изменить 'm' для замены массивов на конечные нулевые элементы с более короткими массивами? – azurefrog

+0

@rabbitguy На самом деле это не 2D-массив, а просто массив массивов int. Не все массивы должны быть одинаковой длины. Совершенно законно иметь что-то вроде 'int [] [] m = {{1}, {1, 2}, {1, 2, 3}};' – azurefrog

+0

Я хочу создать * n-матрицу и напечатать ее без ноль. Да, я просто хочу не печатать их. Но так как первая строка из 0 необходима для вычислений остальной части матрицы, я думаю, мне пришлось бы избавиться от них после создания матрицы с нулем. Извините, но я огромный noob в java! – erikperik

ответ

1

Должен ли я преобразовать матрицу в строку

Вы уже делаете, когда вы используете System.out.println(). Вам просто нужно изменить то, что вы даете этому методу.

Начнем с того, что у вас есть:

for(int i=0; i<b.length; i++){ 
for(int j=0; j<b[i].length; j++){ 
    System.out.print(b[i][j] + " ");//where you print results out 
} 
System.out.println(); 
} 

Вам нужно что-то более сложное, чем б [я] [J] +»", чтобы получить результаты, которые вы хотите, так как интерпретации струнный по умолчанию целого числа '0', ну, '0'. Вы хотите, чтобы «0» отображалось в пробел ''.

Способ, который кажется мне самым простым, заключается в том, чтобы создать метод, который обрабатывает эту логику, поскольку на самом деле вы можете просто не получать вывод, если есть нуль. Использование метода позволяет вам изменить это очень легко позже, если я неверно истолковал ваш вопрос. (Вам нужно будет поместить этот метод в тот же класс, что и класс writeElement.)

private static String getPrintValueForMatrix(int value) 
{ 
    if(value == 0) 
     return " ";//two spaces 
    else 
     return value+" "; 
} 

изменять исходный код для вызова метода

for(int i=0; i<b.length; i++){ 
    for(int j=0; j<b[i].length; j++){ 
     System.out.print(getPrintValueForMatrix(b[i][j]));//only this line changed 
    } 
System.out.println(); 
} 

и что должно дать вам результаты, как это:

1   
1 1  
1 2 1  
1 3 3 1 
1 4 6 4 1 
+0

Спасибо большое! Отлично проработал :) – erikperik

0

Массивы в Java имеют фиксированную структуру. После создания невозможно динамически удалить/добавить слоты. Если вы хотите это сделать, вам придется использовать элементы коллекции, такие как java.util.arrayList.

Или вам нужно будет создать новый массив; и заполнить строки по-разному. Поэтому вместо того, чтобы всегда иметь одинаковую ширину; вы выделили бы только пространство для ненулевых значений. Затем вы будете перебирать всю свою матрицу; и копировать только ненулевые значения.

Но, конечно же, дело в такой матрице потребует быть очень точным; так как каждый массив строк может иметь разную длину!

Вариант 1 (с использованием списков) имеет большое преимущество, заключающееся в том, что вы можете входить и удалять/добавлять элементы при создании. Недостаток: коллекции работают только со ссылочными типами; в этом случае: Integer. Это означает, что накладные расходы немного.

Вариант 2 требует явного создания новых массивов; и, как сказано: точное отношение к длине.

0

Вы можете создать свой массив String, чтобы вы могли установить элемент как пустую строку (""), если хотите, чтобы она была удалена. Затем, когда вы запрашиваете элементы, вы можете иметь логику, чтобы игнорировать любые "" s и принимать только числа. Это, конечно, означало бы, что вам нужно будет позвонить Integer.valueOf(b[/*indexOne*/][/*indexTwo*/]), чтобы вводить записи в int, если вы хотите их восстановить.

Кроме того, вам нужно будет использовать String.valueOf(/*anInt*/) аналогичным образом, если вы хотите установить элемент с int, а не String.

Смежные вопросы