【问题标题】:Make This Java code more efficient [duplicate]使此Java代码更高效[重复]
【发布时间】:2017-07-01 05:16:17
【问题描述】:

此代码有效,但在执行我的代码后我终于得到了错误,即线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: -1 在 AddNum.main(AddNum.java:24),任何人都可以解决这个问题或提高使用效率。

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;





    }
} }

【问题讨论】:

  • 一个不相关的注释,为什么您将mag 方法标记为可公开访问?您是否需要 mag 才能在 AddNum 类之外使用?请从方法或字段的最低访问权限开始,并仅根据要求进行升级。

标签: java arrays algorithm for-loop numbers


【解决方案1】:

您得到 ArrayIndexOutOfBounds 是因为您正在访问数组中不存在的数组元素,所以您要做的是获取用户输入并计算总和并将其转换为数组,以便您可以通过替换这段代码来做到这一点:-

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

通过以下代码:-

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

所以最终的程序应该是这样的:-

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-23
    • 2017-03-29
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    相关资源
    最近更新 更多