无法正确添加到ArrayList

时间:2017-01-12 20:16:06

标签: java arraylist

我的程序中有2个方法,一个用于在数组中最小的int之上和之下添加*****,另一个用于在最大值之上和之下添加%%%%%。最大的方法与另一方法基本相同,但由于某种原因没有添加所需的方法。

这是最小的元素方法:

public static ArrayList smallestElement() {

        int smallest = array[0];

        for (int i = 0; i < array.length; i++) 
            if (array[i] < smallest) 
                smallest = array[i];

        String smallestString = String.valueOf(smallest);

        ArrayList<String> list = new ArrayList<String>();

        for(int i = 0; i < array.length; i++) {
            if (smallestString.equals(String.valueOf(array[i]))) {
                list.add("*****"); 
                list.add(Integer.toString(array[i]));
                list.add("*****");
            } else {
                list.add(Integer.toString(array[i]));
            }


}

            return list;

    }

以下是最大元素的方法:

public static ArrayList largestElement() {

        int largest = array[0];

        for (int i = 0; i < array.length; i++) 
            if (array[i] > largest) 
                largest = array[i];

        String largestString = String.valueOf(largest);

        for(int i = 0; i < array.length; i++) {
            if (largestString.equals(String.valueOf(array[i]))) {
                smallestElement().add("%%%%%"); 
                smallestElement().add(Integer.toString(array[i]));
                smallestElement().add("%%%%%");
            } else {
                smallestElement().add(Integer.toString(array[i]));
            }
        }

        System.out.println(smallestElement());
        return smallestElement();
    }


}

如果有人知道为什么这不正确,我会非常感谢帮助

3 个答案:

答案 0 :(得分:4)

每次执行smallestElement功能时,都在创建新对象。而是做类似的事情,

ArrayList<String> list = smallestElement();

然后在每次调用smallestElement()方法

时使用此列表对象

答案 1 :(得分:0)

您已经通过此行创建了3次列表

smallestElement().add("%%%%%"); 
smallestElement().add(Integer.toString(array[i]));
smallestElement().add("%%%%%");

只创建一个列表并使用它而不是多次调用smallestelementelement()函数

答案 2 :(得分:0)

你在这里过于复杂。没有必要将那个最小数组值转换为字符串(然后再进行 String 比较)。顺便说一下:那些字符串比较也是你的问题:当你的最小值在你的数组中出现几次时,你的代码肯定不会起作用 - 因为你的代码会为每个匹配添加这些模式!

相反,你可以这样做:

int indexToUse = 0;

for (int i = 0; i < array.length; i++) { // please always use braces!
 if (array[i] < array[indexToUse]) {
   indexToUse = i;
  }
}

List<String> valuesWithMarkerStrings = new ArrayList<>();
for (int i = 0; i < array.length; i++) {
  if (i == indexToUse -1 || i == indexToUse+1) {
    valuesWithMarkerStrings.add("******");
  } else {
    valuesWithMarkerStrings.add(Integer.toString(array[i]);
  }
}

(我的解决方案假设您希望*** ...而不是数组[i]用于此类行...)