ОК, поэтому у меня есть калькулятор оценки игры в боулинг, и у меня есть основной класс, который читает ввод из командной строки и создает объект PlayerScore для каждого игрока, у объекта PlayerScore есть аррайалист и способ добавить к этому arraylist, игра должна идти кадр за кадром и чередовать между игроками, прося количество штырей, которые они сбивали в каждом кадре, а затем вычислять и генерировать отформатированный лист оценки. So for Например, я ввожу, что будут два игрока, тогда я храню имена игроков в String ArrayList, а затем пустой объект playcore в отдельном сопутствующем игроком Arrayalist PlayerScore, у меня есть цикл for, который чередуется между игроками, вложенными в цикл for, который поддерживает отслеживать текущий кадр. Поэтому, когда я вводим оценки для одного игрока, он должен ссылаться на свой объект playercore, вот мой код:Игра Java Bowling - ссылки на разные объекты
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
[email protected]
[5, 5]
Frame : 1
enter rolls for derp
roll 1 :
5
roll 2 :
5
[email protected]
[5, 5, 5, 5]
Frame : 2
enter rolls for matt
roll 1 :
Ok, так как вы можете видеть, что это добавляет рулоны [5, 5] для arraylist в playcore объекта мата, но затем он добавляет рулоны в тот же ArrayList, который заставлял меня думать, что я случайно ссылался на один и тот же объект, но, как вы можете видеть, я распечатывал идентификаторы объектов на консоли и показывает t Шляпа я действительно вызывая различные ссылки объекта PlayerScore, оно должно быть [5,5] на мой счет, то [5,5] для derps забьет в кадре 1, любая помощь ценится
+1 за подсказками, но не в последнюю очередь и для, казалось бы, бесконечного терпения и не испугается от первоначально размещен код – Marco13
@ Marco13: спасибо. –
Да, извиняюсь за неряшливый код, я просто вложил его из затмения. В следующий раз, когда я буду форматировать, те ненужные ArrayLists использовались в более ранней версии кода, и я забыл их удалить. Спасибо за отзыв о сканере, а также, наконец, как @ Marco13 снова поблагодарил за то, что потратил время на чтение моего отвратительного кода. –