我是一个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;
}
是的,我知道这很多,我不擅长解释,但如果有人能帮助我,我不介意试着解释更多的事情,如果这意味着获得帮助,因为我真的像疯了似的现在。
感谢您提供的所有帮助/)
答案 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");
}
}
}
}
}