dart 打印列表中第二大的数字

fjaof16o  于 2023-02-20  发布在  其他
关注(0)|答案(4)|浏览(138)

我需要打印列表中第二大的数字,下面代码的输出是列表中除了第一个和最后一个元素之外的所有元素。
这是什么错误?

void main () {
List a = [9,6,4,10,13,2,3,5];
 a.sort;
 for(int x in a){
  for (int max in a){
   for (int second_last in a){
    if (x > max) {
    second_last = max;
    max = x;
    } else if (x > second_last && x != max) {
      second_last = x;
      print(second_last);
    }
   }
  }
 }
}
1l5u6lss

1l5u6lss1#

您的代码有几处错误:
1.实际上你并不是在对列表进行排序。sort方法返回一个新的排序列表,它并不对现有列表进行排序。所以你需要做的是:

a = a.sort;

1.当你只需要迭代一次的时候,你已经迭代了3次。
1.你没有记录第二大的数字,你只是把它打印出来。
1.您没有检查重复项。如果列表中有重复的数字,您的代码将多次打印这些数字。
这是一个修正后的伪代码

void main() {
  List a = [9, 6, 4, 10, 13, 2, 3, 5];
  

a.sort;
  int max = a[0];
  int second_last = a[0];
  for (int x in a) {
    if (x > max) {
      second_last = max;
      max = x;
    } else if (x > second_last && x != max) {
      second_last = x;
    }
  }
  print(second_last);
}
nwlls2ji

nwlls2ji2#

我需要打印列表上第二大的数字
1.对数组排序(desc)。
1.访问第二个元素。

List a = [9, 6, 4, 10, 13, 2, 3, 5];

a.sort((a, z) => z - a);
// final b = a.toList()..sort(...); if you do not want to modify the original array.

print(a.take(2));         // [13, 10]
print(a.take(2)[1]);      // [10]
print(a.take(2).skip(1)); // [10]
print(a.skip(1).first);   // [10]
db2dz4w8

db2dz4w83#

sort上缺少()。您可以

void main() {
  List a = [9, 6, 4, 10, 13, 2, 3, 5];
  a.sort();
  print(a[a.length - 2]); //get second large item

  List b = [9, 6, 4, 10, 13, 2, 3, 5];
  //or like revese sort
  b.sort((a, b) => b.compareTo(a));
  print(b[1]);
  
}
atmip9wb

atmip9wb4#

如果你找到一个解决方案,是不使用排序函数,但也工作与所有可能的条件,所以你可以使用这个解决方案,以及,

void main(){
var list =[9,6,4,10,13,2,3,5,13];
  
  var secondLargest = findSecLargest(list);
  print(secondLargest);
}

findSecLargest(List<int> list) {
var secLargest =-1;
var largest=list[0];
  
  
  
  for(int i = 1 ; i < list.length ; i ++){
    
    if(largest<list[i]){
      secLargest = largest;
      largest = list[i];
    }else if(secLargest<list[i] && list[i]!=largest){
            secLargest = list[i];
    }
  }
  return secLargest;
}

相关问题