gpt4 book ai didi

Java 保龄球游戏 - 引用不同的对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:46:18 24 4
gpt4 key购买 nike

好的,所以我有一个保龄球比赛得分计算器,其中有一个主类,它从命令行读取输入并为每个玩家创建一个“PlayerScore”对象,PlayerScore 对象有一个数组列表和一个要添加的方法对于那个数组列表,游戏应该逐帧进行并在玩家之间交替,询问他们在每一帧中击倒的针脚数量,然后计算并生成格式化的得分表,例如我输入会有两个玩家,然后我将玩家名称存储在一个 String ArrayList 中,然后将一个空的 playerscore 对象存储在一个单独的对应 PlayerScore Arraylist 中,我有一个 for 循环,它在嵌套在跟踪当前帧的 for 循环中的玩家之间交替,所以当我输入一个玩家的分数时,它应该引用他们的 playerscore 对象,这是我的代码:

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
/*
* In each iteration call the add method of each players PlayerScore object
*/

public class BowlingGameCalculator {
static int Frame = 1;
private static String res;
static ArrayList<PlayerScore> playerArrays = new ArrayList<PlayerScore>();
//static HashMap<String, PlayerScore> play = new HashMap<String, PlayerScore>();
static ArrayList<String> newscore = new ArrayList<String>();
static ArrayList<String> players = new ArrayList<String>();
static String[] scores = new String[21];
static int rscore;
static ArrayList<Integer> running_score = new ArrayList<Integer>();

public static void main(String[] args) throws IOException {
System.out.println("Enter the number of bowlers");
Scanner in = new Scanner(System.in);
int num = in.nextInt();
for(int i =0; i<num; i++) {
System.out.println("enter bowlers name:");
Scanner inp = new Scanner(System.in);
String input = inp.next();
PlayerScore scr = new PlayerScore();
// play.put(input, scr);
players.add(input);
playerArrays.add(scr);
}
System.out.println(players);
outerloop:

for(int j=0; j<players.size();) {
for(int k=0; k< 10;) {
if(j > players.size()-1) {
j = j-players.size();
Frame++;
}

System.out.println("Frame : " + Frame);
if(Frame == 11) {
break outerloop;
}
String playr = players.get(j);
System.out.println("enter rolls for " + playr);
System.out.println("roll 1 : ");

Scanner inp = new Scanner(System.in);
int input = inp.nextInt();
if(input == 10) {
PlayerScore score = playerArrays.get(j);
System.out.println(score);
score.addRoll(input);
score.show();
// PlayerScore scr = play.get(j);
// scr.addRoll(input);
j++;
}
else {
System.out.println("roll 2 :");
Scanner inp2 = new Scanner(System.in);
int input2 = inp2.nextInt();
PlayerScore score = playerArrays.get(j);
System.out.println(score);
score.addRoll(input);
score.addRoll(input2);
score.show();
// PlayerScore scr = play.get(playr);
// scr.addRoll(input);
//scr.addRoll(input2);
// System.out.println(scr);
// scr.show();
//System.out.println(play);
j++;
}
}
//System.out.println(play);
}
}
}

这是 PlayerScore 类

import java.util.ArrayList;
public class PlayerScore {
static ArrayList<Integer> score = new ArrayList<Integer>();
static ArrayList<Integer> newscore = new ArrayList<Integer>();
static ArrayList<Integer> running_score = new ArrayList<Integer>();
public static int rscore;

public PlayerScore() {

}
public PlayerScore(int[] in) {

}
public void addRoll(int x) {
score.add(x);
}

//public boolean isComplete(){

//}
//public int getScore(){

//}

public ArrayList<Integer> show() {
System.out.println(this.score);
return this.score;
}

现在这是试运行的输出

Enter the number of bowlers
2
enter bowlers name:
matt
enter bowlers name:
derp
[matt, derp]
Frame : 1
enter rolls for matt
roll 1 :
5
roll 2 :
5
PlayerScore@169ca65
[5, 5]
Frame : 1
enter rolls for derp
roll 1 :
5
roll 2 :
5
PlayerScore@1301ed8
[5, 5, 5, 5]
Frame : 2
enter rolls for matt
roll 1 :

好的,正如您所见,它将 rolls [5,5] 添加到 matt 的 playscore 对象中的 arraylist,然后将 rolls 添加到同一个 ArrayList,这让我觉得我不小心引用了同一个对象,但是你可以看到我将对象 ID 打印到控制台,它表明我确实调用了 PlayerScore 对象的不同引用,我的分数应该是 [5,5],然后是第 1 帧中的 derps 分数 [5,5] , 任何帮助表示赞赏

最佳答案

  • 其中一个问题是您使用的是静态字段,尤其是 PlayerScore 类的分数 ArrayList。这是一个问题,因为所有 PlayerScore 实例共享同一个 ArrayList,我认为这是导致您的主要错误的原因。解决方案很简单:不要在此处使用静态字段,当您使用它们时,请谨慎使用并用于特定目的。
  • 另一个问题是您的代码中有不必要的垃圾。为什么要在两个不同的类中声明两个完全不同的 newscore 和 running_score 字段?你会想要消除其中之一。
  • 此外,您在只需要一个的情况下创建了过多的 Scanner 对象。
  • 您的代码格式,尤其是缩进,太可怕了。为什么这很重要?您的代码格式越好,就越容易看出哪一行代码属于哪个执行 block ,就越容易分辨出您的代码在做什么,您和我们调试代码也就越容易。不要试图通过不小心格式化代码来让您和我们的工作变得更加困难。一点点的努力将大有帮助。

关于Java 保龄球游戏 - 引用不同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21687054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com