如何在java中的数组中划分双精度?

时间:2016-09-30 20:04:47

标签: java arrays division

我有阵中有一些双打。我想分割它们,例如使用包含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初学者。任何人都可以帮我吗?感谢

2 个答案:

答案 0 :(得分:1)

您的代码有三个问题。

  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循环的范围内定义的,因此在您打印结果后它不可见。

  2. 修复#1后,您会收到for个异常,因为第二个ArrayOutOfBounds循环会尝试访问for

  3. 您不检查用户提供的参数。如果用户指定要分割divisionArray[k+1]个数字怎么办?您的代码将尝试创建长度为-5的数组,从而导致-5。另外,如果用户想要除以零怎么办?你还好吗?

  4. 这是一个稍好的版本:

    Exception
    祝你好运。

答案 1 :(得分:-1)

这应该有效:

1 ,2 ,3 ,4 ,5
6 ,7 ,8 ,9 ,10
11,12,13,14,15