我有阵中有一些双打。我想分割它们,例如使用包含6.0,3.0和2,0的数组,结果应为1(6/3/2)。我写了以下代码:
System.out.print("How many numbers do you want to divide? ");
int division = input.nextInt();
double[] divisionArray = new double[division];
for(int i = 0; i < division; i++) {
System.out.print("Enter your " + (i + 1) + ". number: ");
divisionArray[i] = input.nextDouble();
}
for(int k = 0; k < division; k ++) {
double resultDivision = divisionArray[k] / divisionArray[k + 1];
}
System.out.println("Result: " + resultDivision);
但这似乎不起作用。我收到错误Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
我是一个完整的Java初学者。任何人都可以帮我吗?感谢
答案 0 :(得分:1)
您的代码有三个问题。
__ZL13Do_GetString2hmPt:
00000000000011b0 pushq %rbp
00000000000011b1 movq %rsp, %rbp
00000000000011b4 movb %dil, %al
00000000000011b7 movb %al, -0x1(%rbp)
00000000000011ba movq %rsi, -0x10(%rbp)
00000000000011be movq %rdx, -0x18(%rbp)
00000000000011c2 movzbl -0x1(%rbp), %edi
00000000000011c6 movl %edi, %ecx
00000000000011c8 subl $0x80, %ecx
00000000000011ce movl %edi, -0x2c(%rbp)
00000000000011d1 movl %ecx, -0x30(%rbp)
00000000000011d4 je 0x121b
00000000000011da jmp 0x11df
00000000000011df movl -0x2c(%rbp), %eax
00000000000011e2 subl $0x81, %eax
00000000000011e7 movl %eax, -0x34(%rbp)
00000000000011ea je 0x122b
00000000000011f0 jmp 0x11f5
00000000000011f5 movl -0x2c(%rbp), %eax
00000000000011f8 subl $0x83, %eax
00000000000011fd movl %eax, -0x38(%rbp)
0000000000001200 jne 0x1236
0000000000001206 jmp 0x120b
000000000000120b movq __ZL14plugin_strings(%rip), %rax ## plugin_strings
0000000000001212 movq %rax, -0x20(%rbp)
0000000000001216 jmp 0x1236
000000000000121b movq 0x15406(%rip), %rax
0000000000001222 movq %rax, -0x20(%rbp)
0000000000001226 jmp 0x1236
000000000000122b movq 0x153fe(%rip), %rax
0000000000001232 movq %rax, -0x20(%rbp)
0000000000001236 movq $0x0, -0x28(%rbp)
000000000000123e xorl %eax, %eax
0000000000001240 movb %al, %cl
0000000000001242 movq -0x28(%rbp), %rdx
0000000000001246 cmpq -0x10(%rbp), %rdx
000000000000124a movb %cl, -0x39(%rbp)
000000000000124d jae 0x126d
0000000000001253 movq -0x28(%rbp), %rax
0000000000001257 movq -0x20(%rbp), %rcx
000000000000125b movsbl (%rcx,%rax), %edx # CRASHES HERE
000000000000125f cmpl $0x0, %edx
0000000000001265 setne %sil
0000000000001269 movb %sil, -0x39(%rbp)
000000000000126d movb -0x39(%rbp), %al
0000000000001270 testb $0x1, %al
0000000000001272 jne 0x127d
0000000000001278 jmp 0x12ad
000000000000127d movq -0x28(%rbp), %rax
0000000000001281 movq -0x20(%rbp), %rcx
0000000000001285 movb (%rcx,%rax), %dl
0000000000001288 movsbl %dl, %esi
000000000000128b movw %si, %di
000000000000128e movq -0x28(%rbp), %rax
0000000000001292 movq -0x18(%rbp), %rcx
0000000000001296 movw %di, (%rcx,%rax,2)
000000000000129a movq -0x28(%rbp), %rax
000000000000129e addq $0x1, %rax
00000000000012a4 movq %rax, -0x28(%rbp)
00000000000012a8 jmp 0x123e
00000000000012ad popq %rbp
00000000000012ae retq
00000000000012af nop
是在resultDivision
循环的范围内定义的,因此在您打印结果后它不可见。
修复#1后,您会收到for
个异常,因为第二个ArrayOutOfBounds
循环会尝试访问for
。
您不检查用户提供的参数。如果用户指定要分割divisionArray[k+1]
个数字怎么办?您的代码将尝试创建长度为-5
的数组,从而导致-5
。另外,如果用户想要除以零怎么办?你还好吗?
这是一个稍好的版本:
Exception
祝你好运。
答案 1 :(得分:-1)
这应该有效:
1 ,2 ,3 ,4 ,5
6 ,7 ,8 ,9 ,10
11,12,13,14,15