提问人:Aviad tech 提问时间:4/2/2022 最后编辑:Aviad tech 更新时间:4/2/2022 访问量:53
需要创建一个函数,它接收一个 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
问:
编写一个接收两位数的函数,直到收到一个非两位数的数字。 • 对于收到的每个号码,程序将生成一个反向号码并打印出来。例如: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)
答:
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,所以我不确定你到底做了什么,但研究得不好。
评论