0
import java.util.Scanner; //importing scanner to get user input 

public class ArrayHelper 
{ 
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 
     int[] hello = new int[10]; 
     for(int i = 0; i < 10; i++) //to get right number of integers 
     { 
      System.out.print("Please enter an integer: "); 
      hello[i] = input.nextInt(); 
     } 
//printing everything out 
     display(hello); 
     System.out.println(); 
     System.out.print("Evens: "); 
     display(onlyEvens(hello)); 
     System.out.println(); 
     System.out.print("Positives: "); 
     display(onlyPositives(hello)); 
     System.out.println(); 
     System.out.print("Odds: "); 
     display(disjoint(hello ,onlyEvens(hello))); 
     System.out.println(); 
     System.out.print("Negatives: "); 
     display(disjoint(hello ,onlyPositives(hello))); 
     System.out.println(); 
    } 

    public static void display(int[] nums) 
    { 
     for(int i = 0; i < nums.length -1; i++) 
      System.out.print(nums[i] + ", "); 

     System.out.print(nums[nums.length - 1]); //!!!!!!this is where the error occurs 
    } 
    public static int[] onlyEvens(int[] nums) //only even numbers in array (anything divisible by 2 including 0) 
    { 
     int x = 0; //for set length 
     for(int i = 0; i < nums.length; i++) 
      if (nums[i]%2 == 0) //checks if even 
       x++; 

     int[] y = new int[x]; 
     int z = 0; 

     for(int i = 0; i < nums.length; i++) 
      if (nums[i]%2 == 0) //checks if even 
      { 
       y[z] = nums[i]; 
       z++; 
      } 
     return y; 
    } 
    public static int[] onlyPositives(int[] nums) //looking for only positive integers in array 
    { 
     int x = 0; //sets set length 
     for(int i = 0; i < nums.length; i++) 
      if (nums[i] > -1) //checks if positive 
       x++; 

     int[] y = new int[x]; 
     int z = 0; 

     for(int i = 0; i < nums.length; i++) 
      if (nums[i] > -1) //checks if positive 
      { 
       y[z] = nums[i]; 
       z++; 
      } 

     return y; 
    } 

    public static int[] disjoint(int[] nums, int[] nums2) 
    { 
     int x = 0; 

     for(int i = 0; i < nums.length; i++) 
     { 
      int j = nums[i]; 
      if(!contains(nums2 , j)) //checks if letter be there 
       x++; 
     } 

     for(int i = 0; i < nums2.length; i++) 
     { 
      int j = nums2[i]; //checks if letter be there 
      if(!contains(nums , j)) 
       x++; 
     } 

     int[] y = new int[x]; 
     int z = 0; 

     for(int i = 0; i < nums.length; i++) 
     { 
      int j = nums[i]; //checks if letter be there 
      if(!contains(nums2 , j)) 
      { 
       y[z] = nums[i]; 
       z++; 
      } 
     } 

     for(int i = 0; i < nums2.length; i++) 
     { 
      int j = nums2[i]; //checks if letter be there 
      if(!contains(nums , j)) 
      { 
       y[z] = nums2[i]; 
       z++; 
      } 
     } 
     return y; 
    } 
} 

これは、ユーザー入力を取り込んで10個の整数を取得して配列を作成するプログラムです。私はすべてのプログラムを完了しており、コンパイル時エラーはありませんが、コードを実行すると、表示方法のインデックスが範囲外(-1)になっています。ありがとうございました!このランタイムエラーを修正するにはどうすればよいですか?スレッドmainでの例外java.lang.ArrayIndexOutOfBoundsException:-1

+0

デバッガで実行しようとしましたか? – ControlAltDel

+0

[java.lang.ArrayIndexOutOfBoundsExceptionの原因となるものは何ですか?どうすれば防止できますか?](http://stackoverflow.com/questions/5554734/what-c​​auses-a-java-lang-arrayindexoutofboundsexception-and-how- do-i-prevent-it) –

+1

[何がjava.lang.ArrayIndexOutOfBoundsExceptionを引き起こすのか、それを防ぐにはどうすればいいですか?](http://stackoverflow.com/questions/5554734/what-c​​auses-a-java- –

答えて

0

containsメソッドを作成していないようです。

ここでは、メソッドです:

private static boolean contains(int[] nums, int j) { 
     return false; 
    } 

そして、ここでそれをテストあなたの全体のコードであり、それが働いているようだ:

import java.util.Scanner; //importing scanner to get user input 

public class OutOfBound { 

     public static void main(String[] args) 
     { 
      Scanner input = new Scanner(System.in); 
      int[] hello = new int[10]; 
      for(int i = 0; i < 10; i++) //to get right number of integers 
      { 
       System.out.print("Please enter an integer: "); 
       hello[i] = input.nextInt(); 
      } 
    //printing everything out 
      display(hello); 
      System.out.println(); 
      System.out.print("Evens: "); 
      display(onlyEvens(hello)); 
      System.out.println(); 
      System.out.print("Positives: "); 
      display(onlyPositives(hello)); 
      System.out.println(); 
      System.out.print("Odds: "); 
      display(disjoint(hello ,onlyEvens(hello))); 
      System.out.println(); 
      System.out.print("Negatives: "); 
      display(disjoint(hello ,onlyPositives(hello))); 
      System.out.println(); 
     } 

     public static void display(int[] nums) 
     { 
      for(int i = 0; i < nums.length -1; i++) 
       System.out.print(nums[i] + ", "); 

      System.out.print(nums[nums.length - 1]); //!!!!!!this is where the error occurs 
     } 
     public static int[] onlyEvens(int[] nums) //only even numbers in array (anything divisible by 2 including 0) 
     { 
      int x = 0; //for set length 
      for(int i = 0; i < nums.length; i++) 
       if (nums[i]%2 == 0) //checks if even 
        x++; 

      int[] y = new int[x]; 
      int z = 0; 

      for(int i = 0; i < nums.length; i++) 
       if (nums[i]%2 == 0) //checks if even 
       { 
        y[z] = nums[i]; 
        z++; 
       } 
      return y; 
     } 
     public static int[] onlyPositives(int[] nums) //looking for only positive integers in array 
     { 
      int x = 0; //sets set length 
      for(int i = 0; i < nums.length; i++) 
       if (nums[i] > -1) //checks if positive 
        x++; 

      int[] y = new int[x]; 
      int z = 0; 

      for(int i = 0; i < nums.length; i++) 
       if (nums[i] > -1) //checks if positive 
       { 
        y[z] = nums[i]; 
        z++; 
       } 

      return y; 
     } 

     public static int[] disjoint(int[] nums, int[] nums2) 
     { 

      int x = 0; 

      for(int i = 0; i < nums.length; i++) 
      { 
       int j = nums[i]; 
       if(!contains(nums2 , j)) //checks if letter be there 
        x++; 
      } 

      for(int i = 0; i < nums2.length; i++) 
      { 
       int j = nums2[i]; //checks if letter be there 
       if(!contains(nums , j)) 
        x++; 
      } 

      int[] y = new int[x]; 
      int z = 0; 

      for(int i = 0; i < nums.length; i++) 
      { 
       int j = nums[i]; //checks if letter be there 
       if(!contains(nums2 , j)) 
       { 
        y[z] = nums[i]; 
        z++; 
       } 
      } 

      for(int i = 0; i < nums2.length; i++) 
      { 
       int j = nums2[i]; //checks if letter be there 
       if(!contains(nums , j)) 
       { 
        y[z] = nums2[i]; 
        z++; 
       } 
      } 
      return y; 
     } 

     private static boolean contains(int[] nums, int j) { 
      return false; 
     } 
    } 
0

与えられたとき、あなたの表示方法は、ケースを処理しません。配列numsは空です(つまり、要素がゼロです)。配列が空の場合、nums.length==0なので、nums[nums.length - 1]nums[-1]であり、例外が作成されます。

なぜループから最後の要素を除外しますか?ループは空の配列を正しく処理するので、ループにすべての要素を出力させます。

public static void display(int[] nums) 
{ 
    for(int i = 0; i < nums.length; i++) 
     System.out.print(nums[i] + ", "); 
} 
+0

最後にコンマとスペースが必要ないので、おそらくループの外側の最後のものを残しました。 – EyedJellyfish

+1

それは可能です。書式設定で自分自身を占有したくない場合は、['Arrays.toString'](http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html# toString%28java.lang.Object []%29)。 –

関連する問題