为了账号安全,请及时绑定邮箱和手机立即绑定

本人Java新手,请教各位大神,为啥输出结果是5个0哇?

本人Java新手,请教各位大神,为啥输出结果是5个0哇?

fln195 2016-07-28 16:07:01
 
查看完整描述

3 回答

已采纳
?
luofuxiang

TA贡献34条经验 获得超34个赞

    仔细看了一下楼主的代码,发现楼主代码存在的问题是k变量定义的位置不对,所以出现楼主看到的情况;然后判断条件存在一点小问题,会造成下标越界异常。在楼主代码的基础之上,对代码进行了简单的修改,并把多于的变量j去除了。下面是修改后的代码,代码在eclipse下调试运行过。

源代码:

import java.util.Arrays;

public class Main
{
	public static void main(String[] args)
	{
		Main hello = new Main();
		int[] scores = {89,-23,64,91,119,52,73};
		System.out.println("考试的前三名为:");
		hello.getArry(scores);
 	}
	
	public void getArry(int[] nums)
	{
		Arrays.sort(nums);
		int[] fronts = new int[3];
		int k = 0;	//修改这里,将 k 和 j定义在循环外部
		for(int i = nums.length - 1; i>=0; i--)
		{
			
			if(nums[i]>=0 && nums[i]<=100 && k<3)//这里k应该小于3,等于3时会下标越界
			{
				fronts[k] = nums[i];
				System.out.println(fronts[k]);
				k++;
			}
			else 
			{
				continue;
			}
		}
	}
	
}

输出结果:

考试的前三名为:
91
89
73
查看完整回答
反对 回复 2016-07-28
?
望远

TA贡献1017条经验 获得超1032个赞

楼主应该将j++放在输出之后,if条件判断的第三个改为k<3

查看完整回答
1 反对 回复 2016-07-28
?
KXFT

TA贡献113条经验 获得超58个赞

因为你创建了fronts这个数组后没有给他赋值,默认值为0


查看完整回答
反对 回复 2016-07-28
  • fln195
    fln195
    我将j++一行放在print的后面之后,运行结果如下,多出两个分数 考试的前三名为: 91 89 73 64 52
  • KXFT
    KXFT
    你这个循环是根据i来决定的,一共循环了7次,有两次不符合i的值,所以输出了5次,有5个值
  • 3 回答
  • 1 关注
  • 1270 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信