[英]Array index out of bounds
尽管我尝试使用break
解决异常,但输入“ 321”仍然失败。 在hackerrank上进行冒泡排序的代码。
错误发生在if(a[i+1]==n)
。
import java.io.*;``
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] a = new int[n];
for(int a_i=0; a_i < n; a_i++){
a[a_i] = in.nextInt();
}
// Write Your Code Here
int numSwaps=0;
for(int i=0;i<n;i++){
if(a[i+1]==n){ // error occurs here
break;
}
else{
if(a[i]>a[i+1]){
int temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
numSwaps++;
}
}
}
//firstElement=a[0];
//lastElement=a[n-1];
System.out.println("Array is sorted in"+" "+numSwaps+" "+"swaps."+"\n"+"First Element:"+" "+a[0]+"\n"+"Last Element:"+" "+a[n-1]);
}
}
当i=n-1
,您的条件i<n
将溢出,因为您要添加i+1
,因此您将引用数组越界。
修复很容易,但是,将条件更改为i<n-1
。
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] a = new int[n];
for(int a_i=0; a_i < n; a_i++){
a[a_i] = in.nextInt();
}
// Write Your Code Here
int numSwaps=0;
for(int i=0;i<n-1;i++){
if(a[i+1]==n){
break;
} else if(a[i]>a[i+1]){
int temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
numSwaps++;
}
}
//firstElement=a[0];
//lastElement=a[n-1];
System.out.println("Array is sorted in"+" "+numSwaps+" "+"swaps."+"\n"+"First Element:"+" "+a[0]+"\n"+"Last Element:"+" "+a[n-1]);
}
同样,以代码风格为荣; 我做了几次修饰,但还远远不够。
只需将for循环中的条件更改为I <n-1,它的发生是由于程序中交换模块中的I + 1。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.