2016-06-13 7 views
1

[編集]問題を明らかにするために編集したサイトにはかなり新しいです。方法でのArraList要素の削除

私は、パラメータの1つが配列であるメソッドを持つプロジェクトに取り組んでいます。

例:

public class Match 

public void playMatch(int teamA, int teamB, ArrayList<String> groups) 
Random scoreA = new Random(); 
int score1 = scoreA.nextInt(5) + 0; 
int score2 = scoreA.nextInt(5) + 0; 
System.out.println("Qtr 1: " + score1 + " " + score2); 

if (score1 > score2){ 
    System.out.println(groups.get(teamA) + " win " + score1 + " to + 
    score2 + " " + teams.get(teamB) + " eliminated."); 
      teams.remove(teamB); 
} 
else if (score2 > score1){ 
    System.out.println(groups.get(teamB) + " win " + score2 + " to " + 
    score11 + " " + teams.get(teamA) + " eliminated."); 
      teams.remove(teamA);} 
} 
public static void main(String[] args) { 
Match game1 = new Match(); 
ArrayList<String> groups = new ArrayList<String>(
      Arrays.asList("team1", "team2", "team3")); 
System.out.println("Round 1"); 
game1.playMatch(0, 1, groups); 

問題は、私は私のmatchesメソッドで要素を削除すると、それは私の主な方法でのArrayListからそれを削除しないことです。私は、やることができるようにしたいので、これは問題です:

Iから要素を削除すると代わりにチームの1 = team3 2

は、どのように私はそれをするようにすることができ

game2.playMatch(0, 1, groups)

私の一致メソッドの配列は、実際には、私のメインメソッドの配列からその要素を削除しますか?これも可能ですか?可能であれば私のコードに適合するものを持つことを好みます。実際にはこれ以上のものがあるので、別の方法を実装する必要はありませんが、これは何の私は起こりたい。

+2

あなたは[MCVE]私たちに与えることができるのに役立ちますかどうかを確認してください? – Gendarme

+0

配列とarraylistは2つの異なることに注意してください。 – Gendarme

+0

'exampleArray.remove(1);'はおそらく 'exampleArray.remove(elem1);' –

答えて

0

私はあなたが与えたものをリファクタリングし、私の目的は以下の通りです。あなたが求めていることをするようです。構文エラーや書式設定の問題を修正しました。 score1 == score2の関係を考慮していないように見えます。私は変更前と後のあなたのmainメソッドに追加し、リストのプリントアウトに着目し、以下のコードを試してみてください、そして、それは

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
import java.util.Random; 

public class MyMatch { 

    public void playMatch(int teamA, int teamB, List<String> groups) { 
     Random rand = new Random(); 
     int score1 = rand.nextInt(5) + 0; 
     int score2 = rand.nextInt(5) + 0; 
     System.out.println("Qtr 1: " + score1 + " " + score2); 

     if (score1 > score2){ 
      System.out.println(groups.get(teamA) + " win " + score1 + " to " + 
      score2 + " " + groups.get(teamB) + " eliminated."); 
      groups.remove(teamB); 
     } else if (score2 > score1){ 
      System.out.println(groups.get(teamB) + " win " + score2 + " to " + 
      score1 + " " + groups.get(teamA) + " eliminated."); 
      groups.remove(teamA); 
     } else if (score1 == score2) { 
      System.out.println(groups.get(teamA) + " tie " + score1 + " to " + 
      groups.get(teamB) + " " + score2 + " no team was eliminated."); 
     } 
    } 

    public static void main(String[] args) { 
     MyMatch game1 = new MyMatch(); 
     List<String> groups = new ArrayList<String>(Arrays.asList("team1","team2", "team3")); 
     System.out.println("Round 1"); 
     System.out.println("BEFORE: " + groups); 
     game1.playMatch(0, 1, groups); 
     System.out.println("AFTER: " + groups); 
    } 
} 
+0

これは動作しますが、これはなぜArrayListからListに構文を切り替えるだけですか?つまり、それは文字通り私がこの答えによって行ったことであり、ArrayListがしなかったところで動作します。 – Smackelbap

+0

これはなぜ今働くのではないのですか?それはこのポストでは長すぎる多型に関するもう一つの長い議論です。ここに良いリンクがあります。 http://www.tutorialspot.com/java/java_polymorphism.htm。とにかく、あなたのコードに構文エラーが多数ありました(中括弧がない、score11やチームのような変数が間違っている、最初のprint stmtの引用符がないなど)。あなたはEclipseのようなIDEを使っていますか?そうであれば、コード内のコンパイルエラーをキャッチします。それ以外のコードは問題ありませんでした! –

+0

ArrayListはリストです。 Java(JVM)は、実行時にリストのどの実装が実行されているかを把握しています(ArrayList、LinkedListなど)。 ArrayList ではなく、メソッドのパラメータタイプとしてList を使用すると、コードのスケーラビリティと再利用性を向上させるために、Listのさまざまな実装を受け入れる柔軟性が得られるため、ベストプラクティスです。また、宣言された型(オブジェクト割り当ての左手側)としてArrayListではなくリスト付きのインスタンスを作成することもできます。理にかなっている? –

0

以下の例では、removeByIndexメソッドには、a(指定されたインデックス)、b(別のインデックス)、arrayList(要素のコンテナ)の3つの引数を渡します。次に、コンテナのコピー(複製)を行い、aとbの中で最も小さいインデックスを見つけ、そのインデックスの要素をarrayListから削除し、変更されたコピーを返します。

public static ArrayList<String> removeByIndex(int a, int b, ArrayList<String> arrayList) { 

    ArrayList<String> clone = (ArrayList<String>) arrayList.clone(); 

    int minIndex = Math.min(a, b); 

    clone.remove(minIndex); 

    return clone; 
} 

public static void main(String[] args) { 

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

    example.add("One"); 
    example.add("Two"); 
    example.add("Three"); 
    example.add("Four"); 
    example.add("Five"); 

    System.out.println(example); 

    example = removeByIndex(1, 3, example); 

    System.out.println(example); 
} 

メソッドの戻り値をコンテナに割り当てる必要があります。それ以外の場合は、変更されません。

+0

貧しい質問の書式設定についてお詫び申し上げます。私はこのサイトをかなり新しく紹介しています。これがより明確になることを願っています。 – Smackelbap

+0

@Marcelo Vinicius:うーん....なぜあなたはarrayListをクローンしているのか理解できますか? –

+0

クローニングはメソッドに渡すのとは異なるものではありませんか?私はこの方法でそれをやっているので、私はちょうどそのメソッドを呼び出すことができます。 50個のチームがある場合、ArrayListを初期化して数百行のコードを書くのではなく、チームで満たすことで、メソッドを50回呼び出すことができます。あなたが求めているのはこれですか? – Smackelbap

関連する問題