Java 投币顺序
我被这个项目困住了。我必须编写一个抛硬币程序来生成HTH(121),我必须计算生成该序列需要多少次抛硬币。然后我需要计算序列的平均值。下面是代码。例如:如果我得到Java 投币顺序,java,Java,我被这个项目困住了。我必须编写一个抛硬币程序来生成HTH(121),我必须计算生成该序列需要多少次抛硬币。然后我需要计算序列的平均值。下面是代码。例如:如果我得到 1112222222122122122211222121 28 11111122121 11 11121 5 那么我的平均值应该是(28+11+5)/3=14.66667。然而,我一直在编写平均值。我已经设置了for循环,但我不确定在哪里或如何放置平均值的代码 我在考虑做类似的事情 int average= count/N; 但我
1112222222122122122211222121
28
11111122121
11
11121
5
那么我的平均值应该是(28+11+5)/3=14.66667。然而,我一直在编写平均值。我已经设置了for循环,但我不确定在哪里或如何放置平均值的代码
我在考虑做类似的事情
int average= count/N;
但我不知道如何将每个计数相加,也不知道在编译器没有说“计数不能解析为变量”的情况下,将该语句放在何处
封装HTX\u程序;
公共类硬币序列{
公共静态int coinFlip(){
多模硬币=新多模硬币(2);
硬币卷();
int x=coin.getFaceValue();
返回x;
}
公共静态void main(字符串[]args){
最终整数N=3;
对于(int i=0;i首先,您需要跟踪所有循环的总翻转:
int totalFlips = 0;
然后,您需要在每次翻转时增加该值:
totalFlips++;
最后,在循环之后,您可以计算平均值:
// Note: You have to convert one of the integers to double in order to get correct result.
double average = totalFlips / (double)N;
以下是完整的修改功能:
public static void main(String[] args) {
final int N=3;
int totalFlips = 0; // Track total flips.
for(int i=0; i<N; i++){
String sequenceSoFar = "";
sequenceSoFar += coinFlip();
sequenceSoFar += coinFlip();
sequenceSoFar += coinFlip();
int count = 3;
totalFlips += 3; // add initial 3 flips to total.
if(!sequenceSoFar.equals("121")) {
while(!(sequenceSoFar.substring(sequenceSoFar.length() - 3).equals("121"))) {
sequenceSoFar += coinFlip();
count++;
totalFlips++; // increment total flips.
}
}
System.out.println(sequenceSoFar);
System.out.println(count);
}
double average = totalFlips / (double)N; // Calculate average.
}
publicstaticvoidmain(字符串[]args){
最终整数N=3;
int totalFlips=0;//跟踪总翻转。
对于(int i=0;i虽然musefan的解决方案是完全正确的,但在跑步过程中同时计算“计数”和“总翻转”对我来说有点奇怪。
我只做一次跑步,然后将跑步的“计数”添加到总翻转中。
为了使它更加明显,我还将在一个单独的方法中运行一次(以下代码基于musefan的代码):
publicstaticvoidmain(字符串[]args){
最终整数N=3;
int totalFlips=0;//跟踪总翻转。
对于(int i=0;在进行整数除法(count/N
)时输入该值),像1/3
或2/3
这样的操作将返回0
。如果需要小数,请使用double
。平均值不是整数,它应该是doubledouble avarage=count*1.0/N;
您还需要乘以1.0
,否则它将进行整数除法。是的,谢谢。我忘记了在!@iajrz,实际检测与@musefan代码中的检测完全相同。我只将处理序列(如您的1121示例)拉入一个单独的方法中。然后删除该方法中递增的totalFlips。结果应该完全相同。请注意,sequenceSoFar.substring(sequenceSoFar.length()-3)
按运行顺序进行最后3次翻转。
public static void main(String[] args) {
final int N=3;
int totalFlips = 0; // Track total flips.
for(int i=0; i<N; i++){
String sequenceSoFar = "";
sequenceSoFar += coinFlip();
sequenceSoFar += coinFlip();
sequenceSoFar += coinFlip();
int count = 3;
totalFlips += 3; // add initial 3 flips to total.
if(!sequenceSoFar.equals("121")) {
while(!(sequenceSoFar.substring(sequenceSoFar.length() - 3).equals("121"))) {
sequenceSoFar += coinFlip();
count++;
totalFlips++; // increment total flips.
}
}
System.out.println(sequenceSoFar);
System.out.println(count);
}
double average = totalFlips / (double)N; // Calculate average.
}
public static void main(String[] args) {
final int N=3;
int totalFlips = 0; // Track total flips.
for(int i=0; i<N; i++){
int count = nbRollsInNewSequence();
totalFlips += count;
}
double average = totalFlips / (double)N; // Calculate average.
}
//rolls a die until the sequence "121" comes up.
//Prints this count and the sequence and then returns the count.
public static int nbRollsInNewSequence(){
String sequenceSoFar = "";
sequenceSoFar += coinFlip();
sequenceSoFar += coinFlip();
sequenceSoFar += coinFlip();
int count = 3;
if(!sequenceSoFar.equals("121")) {
while(!(sequenceSoFar.substring(sequenceSoFar.length() - 3).equals("121"))) {
sequenceSoFar += coinFlip();
count++;
}
}
System.out.println(sequenceSoFar);
System.out.println(count);
return count;
}