删除方法

时间:2016-06-13 20:58:42

标签: java arraylist

[编辑]这个网站的新手是如此编辑以试图澄清问题。

我正在开发一个项目,其中我有一个方法,其中一个参数是一个数组。

示例:

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方法中删除元素时,它不会从我的main方法中的ArrayList中删除它。这是一个问题,因为我希望能够这样做:

game2.playMatch(0, 1, groups)

其中1 = team3而非2队。

我怎样才能这样做,当我在Matches方法中从数组中删除一个元素时,它实际上会在我的main方法中从数组中删除该元素?这甚至可能吗?如果有可能的话,我希望有一些适合我的代码的东西,如果我不需要,我不想要实施另一种方法,因为实际上有更多的东西,但这给了我希望发生的事情的主旨。

2 个答案:

答案 0 :(得分:0)

在下面的示例中,您将向removeByIndex方法传递三个参数:a(给定索引),b(另一个给定索引)和arrayList(元素的容器)。然后,它将创建容器的副本(克隆),在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);
}

请注意,您必须将方法的返回值分配给容器,否则不会对其进行修改。

答案 1 :(得分:0)

我重构了你给的东西以及下面的作品在我的结尾,并且好像做了你要问的。修复了一堆语法错误和格式化问题。看起来你并没有考虑score1 == score2的关系。请尝试以下代码,记下我在修改前后添加到主方法的列表的打印输出,看看是否有帮助

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