Java,使用Math.random时计算中位数和平均值
Java, calculation of median and average when using Math.random
我的程序让用户选择他想掷骰子的次数,然后程序打印出他得到骰子每一面的次数。
到目前为止一切都很好,但是我必须计算所有这些掷出的骰子的中位数和平均值,我希望平均值和中位数都在 1-6 之间,对应于一个骰子的面数有 - 我该怎么做?
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class Uppgift4_5
{
public static void main(String[] args)
{
Scanner inputReader = new Scanner(System.in);
System.out.println("How many times do you want to throw the dice:");
int amount = inputReader.nextInt();
System.out.println("Antal försök:" + amount);
Map<Integer, Integer> rolls = new HashMap<>();
for (int i = 1; i < 7; i++)
{
rolls.put(i, 0);
}
for (int i = 0; i < amount; i++)
{
int value = (int) (Math.random() * 6 + 1);
rolls.put(value, rolls.get(value) + 1);
}
for (Map.Entry<Integer, Integer> entry : rolls.entrySet())
{
System.out.println(("Antal kast som gav "+entry.getKey()) + ": " + entry.getValue());
}
}
}
第一个 for 循环初始化 hashmap 中的键 1 到 6。
第二个 for 循环计算 X 次掷骰子并将它们添加到哈希图中。
第三个 for 循环遍历 hashmap 中的值并打印出结果。
要计算平均值,您只需获得所有掷骰数的总和(rolls.entrySet()
、Map.Entry::getKey()
、Map.Entry::getValue()
),然后除以它的数量。
要计算中位数,请将所有卷的总和 + 1 除以 2 - 这是奇数卷。当有偶数的卷时,将所有卷按顺序排列,取第 (n-1)/2
个和第 n/2
个元素并除以 2。
List<Integer> series = new ArrayList<>();
for (Map.Entry<Integer, Integer> entry : rolls.entrySet()) {
for (int count = entry.getValue(); count > 0; count--) {
series.add(entry.getKey());
}
}
double median = 0;
if (series.size() % 2 == 0) {
int sum = 0;
for (int element : series) {
sum += x;
}
median = sum / 2;
} else {
Collections.sort(series);
median = (series.get((series.size() - 1) / 2) + series.get(series.size() / 2)) / 2;
}
计算奇数卷的中位数的另一种解决方案是仅从系列中取第 (n-1)/2
个元素。
double median = 0;
Collections.sort(series)
if (series.size() % 2 == 0) {
median = series.get((series.size() - 1) / 2);
} else {
median = (series.get((series.size() - 1) / 2) + series.get(series.size() / 2)) / 2;
}
要计算平均值,您可以使用以下代码:
double average=0;
double total=0;
for (Map.Entry<Integer, Integer> entry : rolls.entrySet())
{
total+=entry.getKey()*entry.getValue();
System.out.println(("Antal kast som gav "+entry.getKey()) + ": " + entry.getValue());
}
average = total/amount;
System.out.println("Average : "+average);
要找到中位数,您需要找到骰子的哪个面出现在 (n+1)/2 处(奇数)和 n/2 和 n/2+1(偶数)。这些是本例中的中位数。
所以只需将出现在顶部的面存储在一个数组中并找到你的中位数。
我的程序让用户选择他想掷骰子的次数,然后程序打印出他得到骰子每一面的次数。
到目前为止一切都很好,但是我必须计算所有这些掷出的骰子的中位数和平均值,我希望平均值和中位数都在 1-6 之间,对应于一个骰子的面数有 - 我该怎么做?
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class Uppgift4_5
{
public static void main(String[] args)
{
Scanner inputReader = new Scanner(System.in);
System.out.println("How many times do you want to throw the dice:");
int amount = inputReader.nextInt();
System.out.println("Antal försök:" + amount);
Map<Integer, Integer> rolls = new HashMap<>();
for (int i = 1; i < 7; i++)
{
rolls.put(i, 0);
}
for (int i = 0; i < amount; i++)
{
int value = (int) (Math.random() * 6 + 1);
rolls.put(value, rolls.get(value) + 1);
}
for (Map.Entry<Integer, Integer> entry : rolls.entrySet())
{
System.out.println(("Antal kast som gav "+entry.getKey()) + ": " + entry.getValue());
}
}
}
第一个 for 循环初始化 hashmap 中的键 1 到 6。
第二个 for 循环计算 X 次掷骰子并将它们添加到哈希图中。
第三个 for 循环遍历 hashmap 中的值并打印出结果。
要计算平均值,您只需获得所有掷骰数的总和(rolls.entrySet()
、Map.Entry::getKey()
、Map.Entry::getValue()
),然后除以它的数量。
要计算中位数,请将所有卷的总和 + 1 除以 2 - 这是奇数卷。当有偶数的卷时,将所有卷按顺序排列,取第 (n-1)/2
个和第 n/2
个元素并除以 2。
List<Integer> series = new ArrayList<>();
for (Map.Entry<Integer, Integer> entry : rolls.entrySet()) {
for (int count = entry.getValue(); count > 0; count--) {
series.add(entry.getKey());
}
}
double median = 0;
if (series.size() % 2 == 0) {
int sum = 0;
for (int element : series) {
sum += x;
}
median = sum / 2;
} else {
Collections.sort(series);
median = (series.get((series.size() - 1) / 2) + series.get(series.size() / 2)) / 2;
}
计算奇数卷的中位数的另一种解决方案是仅从系列中取第 (n-1)/2
个元素。
double median = 0;
Collections.sort(series)
if (series.size() % 2 == 0) {
median = series.get((series.size() - 1) / 2);
} else {
median = (series.get((series.size() - 1) / 2) + series.get(series.size() / 2)) / 2;
}
要计算平均值,您可以使用以下代码:
double average=0;
double total=0;
for (Map.Entry<Integer, Integer> entry : rolls.entrySet())
{
total+=entry.getKey()*entry.getValue();
System.out.println(("Antal kast som gav "+entry.getKey()) + ": " + entry.getValue());
}
average = total/amount;
System.out.println("Average : "+average);
要找到中位数,您需要找到骰子的哪个面出现在 (n+1)/2 处(奇数)和 n/2 和 n/2+1(偶数)。这些是本例中的中位数。 所以只需将出现在顶部的面存储在一个数组中并找到你的中位数。