2015-04-09 3 views
-3
package test; 
import java.util.*; 


public class test { 
    public int[][] left (int matrix[][]) { 

     for(int i=0; i<=3;i++) 
      for (int j=2;j>=0;j--) 
      { 
       if (matrix[i][j] ==0) 
       { 
        for (int k=j+1; k<=3;k++) 
        { 
         matrix[i][k-1]=matrix[i][k]; // chuyen 
        } 
        for (int l=3; l>=0;l--) 
        { 
         if (matrix[i][l] == 0) continue; 
         else matrix[i][l] =0; 
         if (matrix[i][l] != 0) break; 
        } 
       } 
      } 
     return matrix; 
    } 

    public static void main(String[] args) 
    { 
     Scanner in = new Scanner(System.in); 
     int i,j; 
     int[][] a = new int[3][3]; 
     for (i=0;i<=2;i++) 
      for (j=0;j<=2;j++) 
      { 
       System.out.print("input a" +i + j); 
       a[i][j]= in.nextInt(); 
      } 
     left(a); 
     for (i=0;i<=2;i++) 
     { 
      for (j=0;j<=2;j++) 
      { 
       System.out.print(a[i][j]); 
      } 
      System.out.println(""); 
     } 

    } 

} 

Этот метод вставки принимает в качестве входного массива int[][], и я хочу, чтобы метод возвращал новый массив. В примере я получил массив.Как вернуть новый массив из массива в java

a[][]= 
{ 
0 0 2 0 
0 2 0 0 
0 2 2 2 
2 0 0 0 
} 

И я пытаюсь использовать метод как то: left(a); вернуть новый массиву, но это не работает.
Новый массива я хочу, чтобы вернуться как:

{ 
2 0 0 0 
2 0 0 0 
2 2 2 0 
2 0 0 0 
} 

(возрастающий элемент слева, за исключением 0)

Множественных маркеров на этой линии
- Возвращение типа для метода отсутствующего
- Синтаксическая ошибка, вставить "... VariableDeclaratorId", чтобы завершить
FormalParameterList

Я не знаю, как это исправить. Может кто-нибудь помочь?

+4

'но это не work' Пожалуйста, будьте конкретны. Что именно не работает? Ошибки посткомпилирования, сообщение об исключении, трассировка стека, недопустимые или неожиданные результаты. –

+0

Новые массивы создаются с использованием нового слова ** **. И материал возвращается из методов с помощью оператора ** return **. Итак, где именно ваша проблема? – GhostCat

+0

Вы ищете «глубокую копию» вашего массива? Возможно, он ответил здесь: http://stackoverflow.com/questions/1564832/how-do-i-do-a-deep-copy-of-a-2d-array-in-java – vikingsteve

ответ

0

TODO:
1. Разум все вопросы словам @Shirish
2. Не используйте примитив массив, а Collections работы с Class типа. например: Integer[][] a=new Integer[3][3];
3. После ввода запуска ниже код и отображения кода (не называйте left(a) метод)

инкрементный элемент влево, за исключением 0

Что я применил. здесь - взята каждая строка из массива и отсортирована в порядке убывания.

for (Integer[] item : a) { 
     Arrays.sort(item,Collections.reverseOrder()); 
    } 

Надеюсь, что это решит проблему.

Final Код:

public class MyArray { 

    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     int i, j; 
     Integer[][] a = new Integer[3][3]; 
     for (i = 0; i <= 2; i++) 
      for (j = 0; j <= 2; j++) { 
       System.out.print("input a" + i + j); 
       a[i][j] = in.nextInt(); 
      } 
     // left(a); 
     for (Integer[] item : a) { 
      Arrays.sort(item, Collections.reverseOrder()); 
     } 

     for (i = 0; i <= 2; i++) { 
      for (j = 0; j <= 2; j++) { 
       System.out.print(a[i][j]); 
      } 
      System.out.println(""); 
     } 
    } 
} 
1

Ну, мне очень жаль, но у вашего кода много проблем.

  1. left() метод не статичен, и вы пытаетесь получить к нему доступ через статический метод. Это должно дать вам ошибку компиляции.
  2. образец данных вы показали, что вам нужна матрица 4X4, но в основных вы объявляете массив, как int[][] a = new int[3][3]
  3. вы зацикливание в left() методе как for(int i=0; i<=3;i++), который должен бросить arrayIndexOutBoundException.

И я могу видеть ваш комментарий, что это сработало, просто объявив метод left() статическим. Не могли бы вы после этого указать рабочий код?

Я бы порекомендовал вам сначала решить проблемы, упомянутые выше, чтобы иметь возможность сделать ваш код по крайней мере в рабочем состоянии.

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