2016-11-04 5 views
-2

私はjavaを初めて使っています。私はbubblesortアルゴリズムを使って配列をソートするプログラムを書いた。私は3つのメソッドを持っている。getArray()putArray() & sortArray()。私はこれらのメソッドをすべてmain関数から呼び出し、要素の数と配列をパラメータとして渡しました。私はgetArray()関数にヌル配列を渡して、ユーザーからの入力として配列を取得しました。私は入力を得るときに私は例外を取得します。親切に私を助けてください。私は文字通り孤立しています。」例外---以前のすべての回答を読み、解決策を見つけることができません。私がやった間違いを親切に説明して解決策を教えてください

import java.util.Scanner; 
public class BubbleSort { 
    public void getArray(int num,int[]arr) { 
     System.out.print("Enter the total number of elements in the Array : "); 
     Scanner sc = new Scanner(System.in); 
     num = sc.nextInt(); 
     System.out.println(num); 
     System.out.print("Enter " + num + " Elements : "); 
     for (int i = 0; i < num; i++) { 
      arr[i] = sc.nextInt(); 
     } 
    } 
    public void putArray(int num,int[] arr) { 
     System.out.print("The Array is: ");   
     for (int i = 0; i < num; i++) { 
      System.out.println(arr[i] + " "); 
     } 
    } 
    public void sortArray(int num,int[] arr) { 
     for (int i = 0; i < num; i++) { 
      boolean flag = false; 
      for (int j = 0; j < num - i - 1; j++) { 
       if (arr[j] > arr[j + 1]) { 
        arr[j] = arr[j] + arr[j + 1]; 
        arr[j + 1] = arr[j] - arr[j + 1]; 
        arr[j] = arr[j] - arr[j + 1]; 
        flag = true; 
       } 
      } 
      if (!flag) { 
       break; 
      } 
     } 
    } 
    public static void main(String[] args) {   
     int num=0; 
     int[] arr=null; 
     BubbleSort b = new BubbleSort(); 
     b.getArray(num,arr); 
     b.putArray(num,arr); 
     b.sortArray(num,arr); 
     b.putArray(num,arr); 
    } 
} 

答えて

0

null配列を渡して、そのnull配列に入力を設定しようとしているからです。

for (int i = 0; i < num; i++) { 
       arr[i] = sc.nextInt(); 
      } 

ここで、上記のコードでは、ARRがnullpointer例外をスローしヌル0インデックスに値を追加することです。したがって、指定されたnumサイズに従って配列を初期化する必要があります。 即ち

arr = new int[num]; 

書き換え機能:

public class BubbleSort { 
    private int num; 

public int[] getArray() { 
    System.out.print("Enter the total number of elements in the Array : "); 
    Scanner sc = new Scanner(System.in); 
    num = sc.nextInt(); 
    System.out.println(num); 

    int[] arr = new int[num]; 

    System.out.print("Enter " + num + " Elements : "); 
    for (int i = 0; i < num; i++) { 
     arr[i] = sc.nextInt(); 
    } 
    return arr; 
} 

public void putArray(int num, int[] arr) { 
    System.out.print("The Array is: "); 
    for (int i = 0; i < num; i++) { 
     System.out.println(arr[i] + " "); 
    } 
} 

public void sortArray(int num, int[] arr) { 
    for (int i = 0; i < num; i++) { 
     boolean flag = false; 
     for (int j = 0; j < num - i - 1; j++) { 
      if (arr[j] > arr[j + 1]) { 
       arr[j] = arr[j] + arr[j + 1]; 
       arr[j + 1] = arr[j] - arr[j + 1]; 
       arr[j] = arr[j] - arr[j + 1]; 
       flag = true; 
      } 
     } 
     if (!flag) { 
      break; 
     } 
    } 
} 

public int getNum() { 
    return num; 
} 

public void setNum(int num) { 
    this.num = num; 
} 

    public static void main(String[] args) { 

    int num = 0; 
    int[] arr = null; 
    BubbleSort b = new BubbleSort(); 

    arr = b.getArray(); 
    b.putArray(b.getNum(), arr); 
    b.sortArray(b.getNum(), arr); 
    b.putArray(b.getNum(), arr);   
} 

} 
+0

Iは、コードを変更し、例外がなくなっています。配列は、putArray()関数 – Harish93

+0

から表示されません。なぜなら、numArrayの値は –

+0

に変更されないからです。なぜなら、arrはgetArray()関数内で初期化されるため、値は格納されません。だから、あなたはそれを返してそれを使う必要があります。私は答えを更新します。 –

関連する問題