2017-07-01 9 views
-4

このコードは動作しますが、私のコードが実行された後、最後にエラーが発生します。つまり、スレッド "main"の例外です。java.lang.ArrayIndexOutOfBoundsException:-1 AddNum.main(AddNum.java :24)、誰でもこの問題を解決したり、より効率的に使用することができます。このJavaコードをより効率的にする

import java.util.Scanner; 
public class AddNum { 
public static void main(String args[]) 
{ 
    int num1,num2,sum,i=0; 
    int[] arr =new int[5]; 
    System.out.println("Enter Any two number to Add and See magic"); 
    Scanner scan = new Scanner(System.in); 
    num1 = scan.nextInt(); 
    num2 = scan.nextInt(); 
    sum = num1 + num2; 
    System.out.println("The Sum of "+num1+" and "+num2+" is = "+sum); 
    do 
    { 
     arr[i++]=sum%10; 
     sum/=10; 
    }while(sum>0); 
    for(int p=i;p>=0;p--) 
    { 
     mag(arr[p-1]); 
    } 
} 
public static void mag(int sum) 
{ 
    switch(sum){ 
     case 0: 
      System.out.println(" 00000"); 
      System.out.println(" 00 00"); 
      System.out.println(" 000 000"); 
      System.out.println(" 000 000"); 
      System.out.println(" 000 000"); 
      System.out.println(" 000 000"); 
      System.out.println(" 000 000"); 
      System.out.println(" 00 00"); 
      System.out.println(" 00000"); 
      break; 

     case 1: 
     System.out.println("  11"); 
     System.out.println("  111"); 
     System.out.println(" 1 111"); 
     System.out.println("  111"); 
     System.out.println("  111"); 
     System.out.println("  111"); 
     System.out.println("  111"); 
     System.out.println("  111"); 
     System.out.println(" 11111"); 
     break; 
     case 2: 
      System.out.println(" 2222"); 
      System.out.println(" 22 22"); 
      System.out.println(" 2  222"); 
      System.out.println("  22"); 
      System.out.println("  22"); 
      System.out.println("  22"); 
      System.out.println(" 222 2"); 
      System.out.println(" 222 22"); 
      System.out.println(" 222222222"); 
      break; 
     case 3: 
      System.out.println(" 3333"); 
      System.out.println(" 33 333"); 
      System.out.println(" 3  333"); 
      System.out.println("  33"); 
      System.out.println("  333"); 
      System.out.println("  33"); 
      System.out.println(" 3  333"); 
      System.out.println(" 33 333"); 
      System.out.println(" 3333"); 
      break; 
     case 4: 
      System.out.println("  44"); 
      System.out.println("  4444"); 
      System.out.println("  4 444"); 
      System.out.println(" 4 444 "); 
      System.out.println(" 4 444"); 
      System.out.println(" 4444444444"); 
      System.out.println("  444 "); 
      System.out.println("  444"); 
      System.out.println("  44444"); 
      break; 
     case 5: 
      System.out.println(" 5555555"); 
      System.out.println(" 555 5"); 
      System.out.println(" 555"); 
      System.out.println(" 555"); 
      System.out.println(" 555555"); 
      System.out.println("  555"); 
      System.out.println(" 5  555"); 
      System.out.println(" 55 555"); 
      System.out.println(" 5555"); 
      break; 
     case 6: 
      System.out.println(" 66666"); 
      System.out.println(" 66 66 "); 
      System.out.println(" 666  6"); 
      System.out.println(" 666"); 
      System.out.println(" 6666666"); 
      System.out.println(" 666 666"); 
      System.out.println(" 666 666"); 
      System.out.println(" 66 666"); 
      System.out.println(" 66666"); 
      break; 
     case 7: 
      System.out.println(" 777777777"); 
      System.out.println(" 77  777"); 
      System.out.println(" 7  777"); 
      System.out.println("  77"); 
      System.out.println("  77"); 
      System.out.println("  77"); 
      System.out.println(" 777"); 
      System.out.println(" 777"); 
      System.out.println(" 777"); 
      break; 
     case 8: 
      System.out.println(" 888888"); 
      System.out.println(" 888 888"); 
      System.out.println(" 888 888"); 
      System.out.println(" 888888"); 
      System.out.println(" 888 888"); 
      System.out.println(" 888 888"); 
      System.out.println(" 888 888"); 
      System.out.println(" 888 888"); 
      System.out.println("  8888"); 
      break; 
     case 9: 
      System.out.println(" 99999"); 
      System.out.println(" 999 999"); 
      System.out.println(" 999 999"); 
      System.out.println(" 999 999"); 
      System.out.println(" 9999999"); 
      System.out.println("  999"); 
      System.out.println(" 9  999"); 
      System.out.println(" 99 999"); 
      System.out.println(" 9999"); 
      break; 





    } 
} } 
+0

関連のないメモは、なぜあなたは 'mag'メソッドを公開アクセス可能とマークしていますか?あなたは 'mag'を' AddNum'クラスから利用できるようにする必要がありますか?メソッドやフィールドの可能な限り最低限のアクセスから開始し、要件ごとにエスカレートしてください。 – iCrus

答えて

0

あなたは、あなたの配列に存在しない配列の要素にアクセスしているためにArrayIndexOutOfBoundsを取得し、それではあなたがしなければならないことは、ユーザの入力を取得し、それのために合計を計算し、に変換されていますあなたは、コードのこの部分を交換することにより、これを行うことができますので、配列: - :

int[] arr = new int[String.valueOf(sum).length()]; 
    for(int p=0;p<arr.length;p++) 
    { 
     mag(arr[p]); 
    } 

だから、最終的なプログラムのWOU - 次のコードによって

do 
    { 
     arr[i++]=sum%10; 
     sum/=10; 
    }while(sum>0); 
    for(int p=i;p>=0;p--) 
    { 
     mag(arr[p-1]); 
    } 

-

関連する問題