2014-09-15 4 views
0

Задача состояла в том, чтобы принять массив 'a', выбрать альтернативные значения из 'a', сохранить их в обратном порядке в другом массиве 'b' и напечатать значения 'b' , Я написал следующий код, но значения «B» получение напечатанных все 0.Проблема с массивами и методами (JAVA)

import java.io.*; 
public class Assignment 
{ 
    public int[] array(int[] a) 
    { 
     int l=a.length; 
     int x=l-1; 
     int[] b=new int[l]; 
     for(int i=x;i>=0;i=-2) 
     { 
      b[x-i]=a[i]; 
     } 
     return b; 
    } 

    public static void main()throws IOException 
    { 
     BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
     Assignment asg=new Assignment(); 
     System.out.println("How many numbers do you want in the array?"); 
     int l=Integer.parseInt(br.readLine()); 
     System.out.println("Enter the numbers"); 

     int[] a =new int[l]; 
     for(int i=0;i<l;i++) 
      a[i]=Integer.parseInt(br.readLine()); 

     int[] b=asg.array(a); 
     for(int j=0;j<l;j++) 
      System.out.println(b[j]); 
    } 
} 

ответ

1

После фиксации основного метода подписи изменить код следующим образом:

try 
     { 
     BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 
     MainClass asg=new MainClass(); 
     System.out.println("How many numbers do you want in the array?"); 
     int l=Integer.parseInt(br.readLine()); 
     System.out.println("Enter the numbers"); 
     int[] a =new int[l]; 
     for(int i=0;i<l;i++) a[i]=Integer.parseInt(br.readLine()); 
     int[] b=asg.array(a); 
     int newSize = 0; 
     if(l% 2 == 0) 
      newSize = l/2; 
     else 
      newSize = (l/2) +1; 
     for(int j=0;j<newSize;j++) System.out.println(b[j]); 
     } 
     catch(Exception ex) 
    { 
     ex.printStackTrace(); 
    } 


public int[] array(int[] a) 
     { 
      int l=a.length; 
      int x=l-1; 
      int newSize = 0; 
      if(l% 2 == 0) 
       newSize = l/2; 
      else 
       newSize = (l/2) +1; 

      int[] b=new int[newSize]; 
      int i = 0; 
      while(x >= 0) 
       { 
        b[i]=a[x]; 
        i++; 
        x -= 2; 
       } 

      return b; 
     } 

длиной Ь должен быть половиной a и не такой же, как a.

+0

Код работает отлично, спасибо. Хотя я удалил блок catch (Exception ex), потому что у меня возникла ошибка, когда заявление «попробуйте» отсутствует, и нам не разрешено использовать что-либо из учебного плана (среднее образование иногда бывает ограничительным). Во всяком случае, я ценю ваши усилия. –

0

main сигнатура метода не является правильной и проверить это i=-2 состояния.

0

основной метод подписи должен выглядеть следующим образом:

public static void main(String s[]){ 
     .... 
} 

здесь в for() цикле я должен быть уменьшен на 1;

public int[] array(int[] a) 
     { 
      int l=a.length; 
      int x=l-1; 
      int[] b=new int[l]; 
      for(int i=x;i>=0;i--) // decrement i by 1; 
      { 
       b[x-i]=a[i]; 
      } 
      return b; 
     } 
+0

Могу ли я знать, почему голос? – Rustam

+0

Я не спустил вас вниз. –

0

Во-первых, ваша программа не будет компилировать - метод main() имеет неправильную подпись. Использование

public static void main(String[] args) { 
... 
} 

Затем изменить цикл хранения значений в новом массиве:

for(int i = x; i >= 0; i--) { 
    b[x - i] = a[i]; 
} 
+0

и почему проголосовали, если я могу спросить? –

+0

У меня недостаточно «репутации» для downvote. И я не знаю, кто проголосовал за тебя или почему. –

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