2017-01-12 11 views
0

私のプログラムには2つのメソッドがあります.1つは配列の最小のintの上下に*****を加え、もう1つは%%%%%を最大と下のものに加えます。最大の方法は本質的に他の方法と同じですが、何らかの理由で必要なものを追加しない方法です。ここでArrayListに正しく追加することができません

は、最小要素法である:ここで

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


} 

これが正しく実行されていない理由を誰もが知っている場合、私は本当に感謝しますhelp

+1

'array'はどこで宣言されインスタンス化されていますか?また、変数に 'array'や' list'のような名前を付けないでください。 – CraigR8806

+1

'int'sを比較しています。なぜそれらを' String'sにキャストしますか?そしてそれはリストに追加している間に 'Integer'に戻すだけです。 –

+2

' smallestElement() 'を呼び出すたびに、新しい' List'を作成しています。 – azurefrog

答えて

3

smallestElement関数を実行するたびに新しいオブジェクトが作成されます。代わりに何かのような、

ArrayList<String> list = smallestElement(); 

は、あなたはすでにこの行で3回以上

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

をリストを作成しているあなたはsmallestElement()方法

0

呼び出しているすべての時間はわずか1を作成し、このリストのオブジェクトを使用しますsmallestelementelement()関数を複数回呼び出す代わりにリストを作成して使用してください。

0

ここでは複雑な作業が行われています。その最小配列値をそこにある文字列に変換する必要はありません(の文字列の比較は後で行います)。 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]); 
    } 
} 

(私の解決策は、あなたが***がしたいことを想定してい...ではなく、配列の[i]はこのような行...)

代わりに、あなたのような何かを行うことができます

関連する問題