2016-12-04 2 views
0

Напишите метод, который принимает 2D-массив целых чисел в качестве аргумента. Массив возвращает новый 2D-массив целых чисел того же размера (столько же строк и столбцов). Значения в возвращаемом массиве такие же , как и в массиве аргументов EXCEPT, что любые отрицательные значения сделаны положительными.Как исправить незаконный запуск компиляции выражения?

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

Это то, что я сделал:

public class Examprep1 
{ 
    public static void main (String[] args) 
    { 
     int [][] array = new int[2][4]; 
     array[0][0]=1; 
     array[0][1]=5; 
     array[0][2]=-7; 
     array[0][3]=9; 
     array[1][0]=-2; 
     array[1][1]=4; 
     array[1][2]=6; 
     array[1][3]=-8; 

     int x; 

     // Using for loops to create the 2D array 
     for (int rows=0; rows<2; rows++) 
     { 
      for (int cols=0; cols<4;cols++) 
      { 
       System.out.print(array[rows][cols]+ " "); 
      } 
      System.out.println(""); 
     } 
     System.out.println(newArray(array)); 

     private static int[][] newArray(int[][] old) 
     { 
      int y; 
      int[][] current = new int [2][4]; 

      for (int rows=0; rows<2; rows++) 
      { 
       for (int cols=0; cols<4;cols++) 
       { 
        if (old[rows][cols]<0) 
        { 
         y=Math.abs(old[rows][cols]); 
         old[rows][cols] = (int)Math.pow(old[rows][cols],2)/x; 
        } 
        old[rows][cols] = current[rows][cols]; 
       } 
      } 
      return current; 
     } 
    } 
} 
+1

Вы пропускаете '}' после 'System.out.println (newArray (массив)),' 'до конца main'. Вам нужно сделать это * до *, вы можете объявить 'newArray'. Затем у вас есть дополнительное закрытие '}' после 'newArray'. Наконец, где 'x' происходит из' old [rows] [cols] = (int) Math.pow (old [rows] [cols], 2)/x; '? –

+3

Вы определили метод внутри метода. Вы не можете этого сделать –

+0

Вы не должны полагаться на 'current = new int [2] [4]', если этот метод должен всегда быть того же размера, что и вход. Также очень непонятно, почему вы квадратизируете числа. –

ответ

0

Есть много выпуска компиляции. Вы должны начать писать код шаг за шагом.

Вот рабочая модель: (Рекомендации вам для справки)

class Examprep1 { 
    public static void main(String[] args) { 
     int[][] array = new int[2][4]; 
     array[0][0] = 1; 
     array[0][1] = 5; 
     array[0][2] = -7; 
     array[0][3] = 9; 
     array[1][0] = -2; 
     array[1][1] = 4; 
     array[1][2] = 6; 
     array[1][3] = -8; 

     int x = 0; 

     // Using for loops to create the 2D array 
     System.out.println("Printing old array"); 
     printArray(array); 

     System.out.println("Printing new array"); 
     printArray(newArray(array, x)); 

    } 

    private static void printArray(int[][] a) { 
     for (int rows = 0; rows < 2; rows++) { 
      for (int cols = 0; cols < 4; cols++) { 

       System.out.print(a[rows][cols] + " "); 
      } 
      System.out.println(""); 
     } 

    } 

    private static int[][] newArray(int[][] old, int x) { 
     int y; 
     int[][] current = new int[2][4]; 

     for (int rows = 0; rows < 2; rows++) { 
      for (int cols = 0; cols < 4; cols++) { 

       y = Math.abs(old[rows][cols]); 
       current[rows][cols] = y; 

      } 

     } 
     return current; 
    } 

} 
+0

wow его удивительно, как вам понадобилось всего несколько минут, чтобы исправить мой код. Надеюсь, когда-нибудь я буду так же хорош ... У меня такое чувство, что это займет долгий ... долгое время. Спасибо, целая куча. Я сейчас просматриваю ваш код, чтобы узнать, что именно я сделал неправильно. У меня отличный выходной. – theredfox24

+0

У вас было хорошее понимание вещей. Просто поместите вещи на место записи. Начните с небольшого фрагмента кода. Продолжайте отладку путем печати промежуточных результатов. – user1211

0

Вы, кажется, в значительной степени имеют более осложненной вашу реализацию. Вы можете объявить и инициализировать 2D-массив одной строкой. Вы также можете использовать Arrays.deepToString(Object[]) для печати 2D-массивов. Нечто подобное,

public static void main(String[] args) { 
    int[][] array = { { 1, 5, -7, 9 }, { -2, 4, 6, -8 } }; 
    System.out.println(Arrays.deepToString(array)); 
    System.out.println(Arrays.deepToString(newArray(array))); 
} //<-- remember to close main. 

Тогда вы могли бы использовать Object.clone() скопировать old массив. Итерируйте массив и установите текущее значение на Math.abs(int). Мол,

private static int[][] newArray(int[][] old) { 
    int[][] current = old.clone(); 
    for (int i = 0; i < current.length; i++) { 
     for (int j = 0; j < current[i].length; j++) { 
      current[i][j] = Math.abs(current[i][j]); 
     } 
    } 
    return current; 
} 

Какие выходы

[[1, 5, -7, 9], [-2, 4, 6, -8]] 
[[1, 5, 7, 9], [2, 4, 6, 8]] 
+0

Спасибо Эллиотту за все замечательные советы. Я понятия не имел, что old.clone() существует. Я почти уверен, что мой учебник пытается испортить мне жизнь. Каждый процесс в нем слишком сложный. В любом случае, вы действительно помогли. У вас отличный выходной. – theredfox24

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