bug调试问题

写了一个小程序,功能大概是:输入两行参数,例如

188
50 42 9 15 105 63 14 30

将下面的50 42 9 15 105 63 14 30按从小到大排序后,从下标为0的元素开始相加,直到相加的和最接近于188

返回和。

贴上源代码~~

public class InterviewQuestion {
 public static void main(String[] args) {


  Scanner sc = new Scanner(System.in);
  Integer str = Integer.valueOf(sc.nextLine());//第一行参数
 
  String secondStr = sc.nextLine();//第二行参数
  String[] split = secondStr.split(" ");
  
  int[] prices = new int[split.length];//将第二次输入的参数存在prices数组中
  
  for (int i=0;i<split.length;i++) {
   Integer temp = Integer.valueOf(split[i]);
   prices[i] = temp;
  }  
  //将数组按从小到大排序
  Arrays.sort(prices);
  int sum = 0;
  for(int i=0;i<prices.length;i++) {
   if(sum >= str) {
    sum = sum - prices[i-1];
    break;
   }else{
   sum = sum + prices[i];
   }
  }
  System.out.println(sum);
  sc.close();
 } 
本来没什么事情,但是诡异的是,随手输入了一组数据

18

5 5 5 5

按道理说,应该返回15才对,但是返回了20,代码我觉得没什么问题,然后debug了一下

诡异的事情发生了


http://img4.mukewang.com/5a59bbfd0001021925391098.jpg

http://img4.mukewang.com/5a59bbff0001b09325451060.jpg

for(int i=0;i<prices.length;i++)   prices.length为4

i=3 的情况下 居然没有进入for循环进行判断?这是怎么回事,怎么也想不出来问题,求大神帮忙看看。。。

月亮岛Superman
浏览 1201回答 0
0回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java