需要创建一个函数,它接收一个 2 degits nums 的数组,在数字之间切换并打印但出现错误

Needed to create a function thet recieves an array of 2 degits nums , Switch between the digits and print but got an error

提问人:Aviad tech 提问时间:4/2/2022 最后编辑:Aviad tech 更新时间:4/2/2022 访问量:53

问:

编写一个接收两位数的函数,直到收到一个非两位数的数字。 • 对于收到的每个号码,程序将生成一个反向号码并打印出来。例如:67 将打印 76。 • 程序将打印一些接收到的数字的计数,这些数字包含数字中的数字 5 Unity(右数字)。

我研究了几次我遇到的错误,但无法解决它,如果你们能提供帮助,非常感谢。

public static void switchInput() {
Scanner star = new Scanner(System.in);
int x=0 , temp=0  , y=1 , i , b=0;
x= star.nextInt();
int[] Switch = new int[x];
//input
for(i=0 ; i<y ; i++){
System.out.println("insert num "+ y + " :");
temp= star.nextInt();
x++;
y++;
Switch[i]=temp;
if(temp<10||temp>99) {
    y=i;
}
if(temp%10==5) {
    b++;
}
temp=0;
}
star.close();
//Switch
int j , temp2 , temp3=0;
for(j=0 ; j<x ; j++) {
temp3=Switch[j]/10;
temp2=Switch[j]%10;
temp3+=temp2*10;
Switch[j]=0;
Switch[j]=temp3;
}
 //print
for(int z = 0;z<x-1;z++) {
System.out.print(" "+Switch[z]+ " ");
} 
System.out.println("Number of times 5 was used is : " + b);
}

我收到错误: 线程“main”java.lang.ArrayIndexOutOfBoundsException 中的异常:索引 44 超出长度 44 的边界 在 hagashaShadi.q1.switchInput(q1.java:37) 在 hagashaShadi.q1.main(q1.java:67)

Java 数组 函数 integer java.util.scanner

评论


答:

0赞 bhaskarkh 4/2/2022 #1

在这里看到你提供的数组大小,假设它的 x=3,这意味着但是当你运行 for 循环时,你会得到这样的 Switch[4],它对于大小为 3 的数组是越界的。所以解决方案是仅在满足条件时才使用 while 循环和插入,一旦它跨越数组的大小,它就应该中断,或者如果你想使用 for 循环,那么当 i>length-of-array 时中断循环x= star.nextInt();int[] Switch = new int[3];

请看下面的代码以进一步理解

    public static void switchInput() {
        Scanner star = new Scanner(System.in);
        int i=0 , countDigit=0;
        List<Integer> numList=new ArrayList<>();
        boolean isTwoDigitNumber=true;
        //Insert all input number of 2 digit
        while(isTwoDigitNumber)
        {
            System.out.println("insert num "+ (i+1)+ " :");
            int temp= star.nextInt();
            if(temp%10==5){
                countDigit++;
            }
            if(temp>10&&temp<99) {
                numList.add(temp);
                i++;
            }else {
                isTwoDigitNumber=false;
            }
        }

        star.close();
//Switch
        //reverse the number and print
        for(int j=0 ; j<numList.size() ; j++) {
            int num = numList.get(j), reversed = 0;
            //System.out.println("Original Number: " + num);
            // run loop until num becomes 0
            while(num != 0) {

                // get last digit from num
                int digit = num % 10;
                reversed = reversed * 10 + digit;

                // remove the last digit from num
                num /= 10;
            }
            System.out.println("reverse Number: " + reversed);
        }
        //print number of times 5
        System.out.println("Number of times 5 was used is : "+countDigit);
    }

评论

0赞 Aviad tech 4/2/2022
谢谢,但我无法决定数组的长度,因为我需要插入 2 位数字,直到用户输入 1 位或以上的 2 位数字
0赞 bhaskarkh 4/2/2022
int[] 开关 = new int[x];这告诉你知道大小。如果您不知道大小,最好使用 ArrayList
0赞 bhaskarkh 4/2/2022
代码编辑请再看一遍,它会一直运行,直到你得到非两位数字
0赞 Aviad tech 4/2/2022
非常感谢,以前从未使用过 Arraylist,所以我不确定你到底做了什么,但研究得不好。