通过void方法获取两个单独的数组

时间:2014-03-30 01:37:41

标签: java arrays methods

我是一个100级的Java课程......很新,这是我的第一个问题,所以请耐心等我:)。

我有一个任务,两个用户输入他们的名字,然后获得他们玩的游戏数量,然后得到他们玩的每个游戏的分数,把分数放在一个数组(或两个数组?) ,然后比较两个阵列和分数,看看谁赢了每场比赛或者他们是否并列,然后显示结果。我不需要对它进行排序或搜索它我不相信。

我的老师说获得分数必须是一个无效的方法,但我不确定如何将这个void方法的值从每个玩家的数组中获取,以便我可以比较得分值。

这是我将分数分成数组的方法:

    public static void inputScores(int[] array, String msg)  {
    String inputScores = "";
    for (int i = 1; i < array.length; i++) {
        inputScores = JOptionPane.showInputDialog(msg + " enter your score for game " + i);
        array[i] = Integer.parseInt(inputScores);
    }
}

这是我的主要方法:

     public static void main(String[] args) {
 //Get the number of games from the user, this is the array length
int[] numberOfGamesPlayed = new int[getPositiveIntOrQuit("How many games were played?")];

 //Get the names of the players (Two)
String input, input2 = "";
input = JOptionPane.showInputDialog("Player 1 - enter your name");
inputScores(numberOfGamesPlayed, input);


input2 = JOptionPane.showInputDialog("Player 2 - enter your name");
inputScores(numberOfGamesPlayed, input2);

 //Get two separate arrays, one for Player1, one for Player2





 String output = "";

 showResults(WINDOW_TITLE, output);
     }
    }

是的,这有点混乱,但是我试图用自己的方式来解决这个问题。这是我的compareScores方法,但我知道这是疯狂的搞砸了。我已经尝试过它,但是,它变得越来越困难。

    public static String compareScores(int[] playerOne, int[] playerTwo, String msg, String msg2) {
    String output = "";
    int player1Wins = 0;
    int player2Wins = 0;
    int tie         = 0;
    for(int i = 0; i < playerOne.length; i++) {
        for(int j = 0; j < playerTwo.length; j++); {
            if(playerOne[i] > playerTwo[i]) {
                output += "Game " + i + " results:" + "\n" + msg + " outscored " + msg2
                        + " by " + (playerOne[i] - playerTwo[i]) + "points.";
                player1Wins++;
            }
            else if(playerOne[i] < playerTwo[i]) {
                player2Wins++;
                output += "Game " + i + " results:" + "\n" + msg2 + " outscored " + msg
                        + " by " + (playerTwo[i] - playerOne[i]) + "points.";
            }
            else {
                output += msg + " and " + msg2 + " scored the same number of points.";
                tie++;
            }

    }
        output += "Summary: ";


        }
    return output;
}

是的,我知道这很多,我不擅长解释,但如果有人能帮助我,我不介意试着解释更多的事情,如果这意味着获得帮助,因为我真的像疯了似的现在。

感谢您提供的所有帮助/)

4 个答案:

答案 0 :(得分:2)

如果这是课堂作业,我会建议您与同学或同学交谈,如果允许的话,这总是最好的学习方式。 如果不允许,那么你不应该在这里寻求帮助:-)

上学的一部分是学习如何思考,学习语言和解决问题

尝试一些OOP或面向对象的原则。

在实际编码之前,始终在纸上编写算法。使用sudo代码,列出所有步骤,然后寻找缩短它的方法。我们都知道硬件很便宜,但优雅的解决方案也必须是一种有效的解决方案。并且不要忘记KISS,Keep It Simple S *** :-)祝你好运。

答案 1 :(得分:1)

“是的,它有点混乱,但是我试图在我自己的方面解决这个问题。这是我的compareScores方法,但我知道这是疯狂的搞砸了。”

完全... !!!!尝试简化代码并清理方法。我相信它会有很大帮助。 我不确定你的编程背景是什么,但从未以下列方式编写java代码:

int[] numberOfGamesPlayed = new int[getPositiveIntOrQuit("How many games were played?")];

以级联方式使用函数的返回值是不好的做法。

同样,一旦您清理了代码,我们就能够更轻松地为您提供帮助。

答案 2 :(得分:1)

在Java中,数组按引用传递(http://way2java.com/arrays/passing-arrays-to-methods/)。所以你不必返回数组。在inputScore方法中分配给数组的所有值都将保留。 我想把你的注意力集中在compareScores方法中我注意到的东西上。为什么使用带索引j的内部FOR循环,但从未使用过该索引?

if(playerOne[i] > playerTwo[i]) {...

您正在比较每个阵列的第i个元素j次,其打印相同的结果j次。确保您正确理解问题。我认为你正在尝试比较相应游戏的每个玩家的得分。例如,如果他们都玩过该游戏,则游戏A和玩家B的得分为游戏#3。如果是这种情况,您将不需要迭代两个for循环。 (只是一个想法)

答案 3 :(得分:1)

这只是为了向您展示其中一种方法。我正在分享代码,因为我看到你是初学者,并且你努力编写代码。此外,您无法复制粘贴以在代码中使用。下次,向我们展示您的算法,不要指望我们的代码。我们只会指导您或告诉您在哪里修复它。

注意:未涵盖异常处理

创建一个Person类来存储您期望的值

public class Person {
    String name;
    int games;
    int[] scores;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getGames() {
        return games;
    }

    public void setGames(int games) {
        this.games = games;
    }

    public int[] getScores() {
        return scores;
    }

    public void setScores(int[] scores) {
        this.scores = scores;
    }
}

现在是主要的课程,

public class Scores {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(new InputStreamReader(System.in));
        int scores[];
        System.out
                .println("**************************************************");
        System.out.println("First player");
        Person player1 = new Person();
        System.out.println("Enter name");
        player1.setName(scanner.nextLine());
        System.out.println("Enter the number of games played");
        player1.setGames(scanner.nextInt());
        scores = new int[player1.getGames()];
        for (int i = 0; i < player1.getGames(); i++) {
            System.out.println("Enter the score for each game");
            scores[i] = scanner.nextInt();
        }
        player1.setScores(scores);

        System.out
                .println("**************************************************");
        scanner = new Scanner(new InputStreamReader(System.in));
        System.out.println("Second player");
        Person player2 = new Person();
        System.out.println("Enter name");
        player2.setName(scanner.nextLine());
        System.out.println("Enter the number of games played");
        player2.setGames(scanner.nextInt());
        scores = new int[player2.getGames()];
        for (int i = 0; i < player2.getGames(); i++) {
            System.out.println("Enter the score for each game");
            scores[i] = scanner.nextInt();
        }
        player2.setScores(scores);

        // compare the scores and output the result

        compareScores(player1, player2);

    }

    private static void compareScores(Person player1, Person player2) {
        // assuming both of them played the same number of games.
        if (player1.getGames() == player2.getGames()) {
            int player1Scores[] = player1.getScores();
            int player2Scores[] = player2.getScores();
            for (int i = 0; i < player1.getGames(); i++) {
                System.out.println("Game " + (i + 1) + " Results");
                if (player1Scores[i] > player2Scores[i]) {
                    System.out.println(player1.getName()+" won ");
                } else if (player1Scores[i] < player2Scores[i]) {
                    System.out.println(player2.getName()+" won ");
                } else {
                    System.out.println("Scores are level");
                }
            }
        }
    }
}