哪位大佬帮我看看我代码好像是没问题的但是输出却有问题

package and;
import java.util.Scanner;
public class ip {
public static void main(String[] args) {
float[] a=new float[6];
float sum=0,ave,c=0;
int i,k=0;
Scanner sc=new Scanner(System.in);
System.out.println(“请输入考试成绩:”);
for(i=0;i<a.length;i++)
a[i]=sc.nextInt();
for(i=0;i<a.length;i++)
sum+=a[i];
ave=sum/a.length;
for(i=0;i<a.length;i++)
{if(a[i]<ave)
k++;
}
System.out.println(“学生平均成绩为:”+ave+”不及格人数为:”+k+”人”);
for(i=0;i<a.length;i++) {
if(a[i]<a[i+1])
{c=a[i];
a[i]=a[i+1];
a[i+1]=c;
System.out.print(a[i]);
}
}

}

}

Java

讨论数量: 2

兄弟,代码格式化呀!!

public static void main(String[] args) {
    float[] a = new float[6];
    float sum = 0, ave, c = 0;
    int i, k = 0;
    System.out.println(a.length);
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入考试成绩:");

    for (i = 0; i < a.length; i++)
        a[i] = sc.nextInt();

    for (i = 0; i < a.length; i++)
        sum += a[i];
    ave = sum / a.length;
    for (i = 0; i < a.length; i++) {
        if (a[i] < ave)
            k++;
    }
    System.out.println("学生平均成绩为:" + ave + "不及格人数为:" + k + "人");
    for (i = 0; i < a.length; i++) {
        if (a[i] < a[i + 1]) {
            c = a[i];
            a[i] = a[i + 1];
            a[i + 1] = c;
            System.out.print(a[i]);
        }
    }
}

这样子不就好多了。

3年前 评论

另外来说一下问题:程序报错抛出的异常为:ArrayIndexOutOfBoundsException 翻译过来就是数组索引超出范围异常。也就是我们常说的数组越界。

这里,你定义的数组为长度为 6,索引从 0 到 5 的 float:

float[] a = new float[6];

但是在后面这段代码中:

for(i=0;i<a.length;i++) {
    if(a[i]<a[i+1]){
        c=a[i];
        a[i]=a[i+1];
        a[i+1]=c;
        System.out.print(a[i]);
    }
}

当 i 循环到 5 时,这里的 a[i+1] 就会去访问 a[6] 的地址,故产生数组越界。

解决办法也很简单,可以判断一下边界情况,也可以将数组开大一点。

3年前 评论
l_yang (楼主) 3年前
飞机飞过天空 (作者) 3年前
l_yang (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!