Java 无法正确添加到ArrayList

Java 无法正确添加到ArrayList,java,arraylist,Java,Arraylist,我的程序中有两个方法,一个是在数组中最小int的上方和下方添加******,另一个是在最大int的上方和下方添加%%。最大的方法基本上与其他方法相同,但出于某种原因,没有添加所需的内容 以下是最小元素法: public static ArrayList smallestElement() { int smallest = array[0]; for (int i = 0; i < array.length; i++) if (a

我的程序中有两个方法,一个是在数组中最小int的上方和下方添加******,另一个是在最大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;

    }
publicstaticarraylistsmallestelement(){
int最小=数组[0];
for(int i=0;i
以下是最大元素的方法:

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();
    }


}
公共静态ArrayList largestElement(){
int最大=数组[0];
for(int i=0;i最大值)
最大=数组[i];
String largestString=String.valueOf(最大);
for(int i=0;i

如果有人知道为什么不能正确执行,我将非常感谢您在每次执行
smallestElement
函数时提供的帮助。而是做一些类似的事情

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

然后,每次调用
smallestElement()
方法时使用此列表对象,每次执行
smallestElement
函数时创建一个新对象。而是做一些类似的事情

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

然后,每次调用
smallestElement()
method

时都使用此列表对象。您已经在此行中创建了三次列表

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

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

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

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

这里的事情太复杂了。无需将最小数组值转换为字符串(稍后再进行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]);
  }
}
int indexToUse=0;
对于(int i=0;i

(其中,我的解决方案假设您希望对这些行使用***…而不是数组[i])

您在这里的操作过于复杂。无需将该最小数组值转换为字符串(随后再进行字符串比较).Btw:这些字符串比较也是您的问题:当最小值在数组中多次出现时,您的代码肯定无法工作,因为您的代码将为每个匹配放入这些模式中

相反,您可以执行以下操作:

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]);
  }
}
int indexToUse=0;
对于(int i=0;i

(其中,我的解决方案假设您希望对这些行使用***而不是数组[i])

数组在哪里声明和实例化?另外,不要将变量命名为
array
list
您正在比较
int
s,那么为什么要将它们转换为
String
s?这只是在添加到列表时将它们解析回
Integer
。每次调用
smallestElement()
,您正在创建一个新的
列表
数组
在哪里声明和实例化?另外,不要将变量命名为
数组
列表
您正在比较的
int
s,那么为什么要将它们强制转换为
字符串
s?这只是在添加到列表..每次调用
smallestElement()
,都会创建一个新的
列表。