그래서이 프로그램을 작성하여 확률적인 이유로 주사위 롤을 시뮬레이션합니다. 그리고 나는 그 문제를 발견했습니다. 나는 그것이 무엇을하고 있는지를 알고 있습니다, 나는 그것을 고치는 법을 모른다.포인터가 아닌 ArrayList를 만드는 방법
변수가 내 points
변수를 가리키고 있거나 참조하고있는 것이 주된 문제입니다. 따라서 평균을 구할 때가되면 각 diceset의 평균치 대신 모든 dicests의 최고점에 대한 평균값을 얻습니다. points
변수를 지우면 신선한 ArrayList로 시작할 수있게 되겠지만 모든 정보도 지워집니다. succ
이 프로그램을 실행하는 데 관심이있는 사람은 3d6과 같은 dicesets를 입력하십시오. 그것은 개인적인 선택이었습니다, 나는 그것을 n 개의 양면 주사위의 어떤 수에 대해서도 설명 할 수 있었지만, 제 목적을 위해서 단지 최대 5 개가 필요했습니다.
import java.util.Random;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;
public class DiceThing {
static Scanner scan = new Scanner(System.in);
static int trials;
static String bleh = new String("hurr");
static ArrayList <String> dice = new ArrayList <String>();
static ArrayList <Integer> roll = new ArrayList <Integer>();
static ArrayList <Integer> points = new ArrayList <Integer>();
static ArrayList <Integer> num = new ArrayList <Integer>();
static ArrayList <Integer> type = new ArrayList <Integer>();
static ArrayList < ArrayList <Integer>> succ = new ArrayList < ArrayList <Integer>>();
static Random rand = new Random();
public static void main(String[] args) {
System.out.println("Enter any number of dicesets. Enter 0 to stop");
while (!bleh.equals("0")) {
System.out.println("Enter diceset: ");
bleh = scan.nextLine();
if (!bleh.equals("0"))
dice.add(bleh);
}
System.out.println("Enter number of trials: ");
trials = scan.nextInt();
for (String i: dice) {
num.add(Integer.parseInt(i.substring(0, 1)));
type.add(Integer.parseInt(i.substring(2)));
}
for (int i = 0; i < dice.size(); i++) { //count place in dicesets
for (int j = 0; j < trials; j++) { //count trials
for (int k = 0; k < num.get(i); k++) //count number of dice in the diceset
roll.add(rand.nextInt(type.get(i)) + 1);
points.add(countSuccess(roll, type.get(i)));
System.out.println(roll.toString() + points.toString());
roll.clear();
}
succ.add(points);
points.clear();
System.out.println(succ.toString());
}
System.out.println("Average success of dice sets:");
for (ArrayList <Integer> i: succ) {
System.out.println(average(i));
}
}
public static int countSuccess(ArrayList <Integer> list, int high) {
int suc = 0, temp;
for (int i = 0; i < list.size(); i++) {
if (list.get(i) >= 5)
suc++;
if (list.get(i) == high)
suc++;
if (list.get(i) >= 10) {
temp = rand.nextInt(type.get(i)) + 1;
roll.add(temp);
list.add(temp);
}
}
return suc;
}
private static double average(ArrayList <Integer> marks) {
Integer sum = 0;
if (!marks.isEmpty()) {
for (Integer mark: marks) {
sum += mark;
}
return sum.doubleValue()/marks.size();
}
return sum;
}
}
원산지가 다른 곳에서도 발생할 수 있지만 문제가 발생합니다.
succ.add(points);
points.clear();
System.out.println(succ.toString());
나는 아주 잘 설명하지 못했을 것이다. 어떤 도움이나 설명도 감사 할 것입니다.
조금 문제를 해결할 수 있습니까? 귀하의 액 톨로 문제가 무엇인지는 질문에서 알 수 없습니다. – SomeJavaGuy
'clear'를 호출하는 대신'points' 참조를'succ'에 추가 한 후 새로운'ArrayList'를 참조하게 만드시겠습니까? –