public class Main{ public static void main(String[]args){ int [] arr={1,7,3,5}; Sort st =new Sort(); st.sort(); st.traverse(); } static class Sort { int [] arr; void sort (){ for(int i=0;i<arr.length;i++){ for (int j=0;j< arr.length;j++) if(arr[j]<arr[j+1]){ int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } void traverse(){ for(int i=0;i< arr.length;i++){ System.out.print(arr[i]+" "); } } } }以上代码有什么错误,并帮我讲一下怎么改,为什么这么改
时间: 2024-01-15 10:02:43 浏览: 86
以上代码有两个错误:
1. 在 Sort 类中的 sort 方法中,没有给数组 arr 赋值,导致 arr.length 报错。
2. 在 Sort 类中的 sort 方法中,循环条件中的 j 应该取到 arr.length-1,否则 arr[j+1] 会越界。
为了改正这些错误,可以将 Sort 类的构造方法中传入一个数组,然后在 sort 方法中使用该数组进行排序。修改后的代码如下:
```
public class Main {
public static void main(String[] args) {
int[] arr = {1, 7, 3, 5};
Sort st = new Sort(arr);
st.sort();
st.traverse();
}
static class Sort {
int[] arr;
public Sort(int[] arr) {
this.arr = arr;
}
void sort() {
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - 1; j++) {
if (arr[j] < arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void traverse() {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
}
```
在 Sort 类的构造方法中传入数组,然后在 sort 方法中使用该数组进行排序。同时在循环条件中,将 j 取到 arr.length-1,避免数组越界的错误。
阅读全文