对一字符串,以‘-’分隔,编程输出所有的整数中去掉最大值、最小值后剩下的整数的个数。注意:最大值与最小值可能有多个!
样例输入:3,3,5,3,6,9,7,9
样例输出: 3
该题的解题思路:首先,要先把字符串转换为String数组,然后可利用链表ArrayList将数组中每一个数添加至链表中,然后利用for循环比较大小,
将最大值与最小值找出来,再用remove方法去除与最大值最小值相同的数。
其中有很重要的一点,在利用remove方法去除最大值与最小值时,因为是在遍历的同时删除数据,所以ArrayList的总长也会发生变化,所以此时可以利用for循环倒序删除。
解题:
import java.util.ArrayList; public class Demo1 { public static void main(String[] args) { String num = "3,3,5,3,6,9,7,9"; method(num); } public static void method(String str){ String[] strs = str.split(","); ArrayList<Integer> arr = new ArrayList<Integer>(); for(int i = 0; i < strs.length; i++){ //将数据添加至链表 arr.add(Integer.parseInt(strs[i])); } int max = arr.get(0); for(int i = 0; i < arr.size(); i++){ //计算出最大值 if(max < arr.get(i)){ max = arr.get(i); } } int min = arr.get(0); for(int i = 0; i < arr.size(); i++){ //计算出最小值 if(min > arr.get(i)){ min = arr.get(i); } } for(int i = arr.size()-1; i >= 0; i--){ //将最大值与最小值从链表中去掉,该处倒序删除为重点. if(arr.get(i) == max || arr.get(i) == min){ arr.remove(arr.get(i)); } } System.out.println("剩余的个数为:" + arr.size()); } }
在解题时,一开始想要通过数组解决,但在转换为string数组之后在比较max和min时出现了无法比较问题,现在已了解什么情况,还有ArrayList应用不熟练,要多联系.