「java旋转硬币」旋转的硬币
今天给各位分享java旋转硬币的知识,其中也会对旋转的硬币进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
用JAVA模拟200次翻硬币并打印出出现正面或反面的最长序列的长度
就是2中结果,正面和反面。把200次的实验的结果放到一个list中,再查找这个list连续最多的数据就可以了。
Java编程 翻硬币问题
public class A {
public static void main(String[] args) {
int j=0;
int n=0;
while(true)
{
for(int i=0;i6;i++)
{
int r = (int) (Math.random()*1000%2);
if(r==0)j+=1;
String s = r==0?"正面 ":"反面 ";
System.out.print(s);
}
if(j==3){System.out.println("第"+n+"次出现了三个正面和三个反面");break;}
else{
j=0;
n+=1;
System.out.println();
}
}
}
}
java投硬币题目
硬币面枚举:
public enum CoinSide {
HEAD(0), TAIL(1);
private int value;
CoinSide(int value) {
this.value = value;
}
}
2.硬币类
import java.util.Random;
public class Coin {
private String name;
private CoinSide coinSide;
public Coin(String name) {
this.name = name;
}
public CoinSide getCoinSide() {
return coinSide;
}
public void setCoinSide(CoinSide coinSide) {
this.coinSide = coinSide;
}
public CoinSide tossCoin() {
Random random = new Random();
int value = random.nextInt(2);
if (value == 0) {
this.coinSide = CoinSide.HEAD;
} else {
this.coinSide = CoinSide.TAIL;
}
this.printCoinSide();
return this.coinSide;
}
public void printCoinSide() {
System.out.println(this.name + " toss " + this.coinSide.name());
}
}
3.主类
public class Main {
public static void main(String[] args) {
Coin coin1 = new Coin("coin1");
Coin coin2 = new Coin("coin2");
while (true) {
coin1.tossCoin();
coin2.tossCoin();
if (coin1.getCoinSide() == coin2.getCoinSide() coin1.getCoinSide() == CoinSide.TAIL) {
break;
}
System.out.println("-------------------");
}
}
}
运行演示:
Java - 6个硬币的移动问题
package desc;
import java.util.List;
import java.util.ArrayList;
/**
* 6个硬币, 三个正三个反 , 总共要移动几次 , 变成一正一反
这阵列要如何写?问题补充:
原本的硬币排列:正正正反反反
结果要变成:正反正反正反
需要打印出移动过程和总共动几次
未移动之前 : ○○○●●●
移动过程:
初始: ○○○●●●
第一次翻转 ○○●○●●
* 第二次翻转 ○●○○●●
* 移动后: ○●○●○●
如有不清楚我再解释
* @author javaBird
* @since 2011-10-13
*/
public class TestReverseCoin {
/**
* 按如题顺序要求翻转
* br
* 假定○代表正面的硬币,●代表反面的硬币
* 初始为 ○○○●●●
* 第一次翻转 ○○●○●●
* 第二次翻转 ○●○○●●
* ...
* ...
* ...
* 移动后: ○●○●○●
* 可以理解为n个相同的String和m个相同String组成一个数组,
* 结果是排序后这两个不同的String元素交错组成的数组
*/
public static void ReverseAsTitle()
{
String[] coins = {"○","○","○","●","●","●"};
int index_1 = -1;//第一个反面硬币的下标
int count = 0;//次数
//注意icoins.length-1,先查找记录反面硬币的位置,给的前提是前面的都是正面或反面,后面的都是反面或反面
for(int i=0;icoins.length-1;i++)
{
if(!coins[i].equals(coins[i+1]))
{
index_1 = i+1;//这个i是原始顺序时第一个反面硬币
}
}
String coin = "";
//循环的是第一个正面硬币和第一个反面硬币间的长度
for(int i=0;iindex_1;)
{
if(index_1 == coins.length)
{
break;
}
//如果相同用coins[index]替换coins[i+1]
if(coins[i].equals(coins[i+1]))
{
coin = coins[i+1];
coins[i+1] = coins[index_1];
coins[index_1] = coin;
//i+2是因为i+1为反面了,循环区间要变为正面i+2和反面index_1之间,新的index_1下面查找出来
i=i+2;
}
//查找后面的第一个反面硬币要从i开始(注意i=i+2了)
for(int j=i;jcoins.length-1;j++)
{
if(!coins[j].equals(coins[j+1]))
{
index_1 = j+1;//这个当前顺序时第一个反面硬币
}
}
//输出语句放在两个break之间
System.out.println("第"+(++count)+"次"+java.util.Arrays.toString(coins));
//当这两个一正一反相邻时,说明已经翻转完毕
if(index_1-i==1)
{
break;
}
}
}
/**
* 将硬币看成一个对象Coin类表示
* 一个属性flag表示正面或反面
* 通过改变flag值实现翻转
*
* Coin类源码见后面...
*/
public static void ResverCoins()
{
ListCoin coins = new ArrayListCoin();
boolean flag;
//初始化一组3个正面硬币和3个反面硬币
for(int i=0;i6;i++)
{
flag = i3?true:false;//前三个正面后三个反面
coins.add(i,new Coin(flag));
}
int count = 0;//次数
//翻转
for(int i=0;icoins.size()-1;i++)
{
//如果这两个都是正或反面
if(coins.get(i).isFlag()==coins.get(i+1).isFlag())
{
//将i+1设置成同i相反的一面
coins.get(i+1).setFlag(!coins.get(i).isFlag());
System.out.println("第"+(++count)+"次"+coins.toString());
}
}
}
/**
* 既然知道原始的只有一正一反
* 结果是正反正反....相间
* 所以,嘿嘿...
*/
public static void ReverseNewString()
{
String[] coins = {"○","○","○","●","●","●"};
String coin_zheng = coins[0];
String coin_fan = "";
for(int i=0;icoins.length;i++)
{
if( !coin_zheng.equals(coins[i]) )
{
coin_fan = coins[i];
}
}
coins = new String[coins.length];
for(int i=0;icoins.length;i++)
{
coins[i] = (i%2==0)?coin_zheng:coin_fan;
}
System.out.println(java.util.Arrays.toString(coins));
}
/**
* 假定○代表正面的硬币,●代表反面的硬币
* 初始: ○○○●●●
*
* 哎,说真的,这样用冒泡做这个问题很显得臃肿啊,明明有n多简便方法
* 所以呢,直接一点
*/
public static void ReverseAsArray()
{
String[] coins = {"○","○","○","●","●","●"};
//保存移动时的中间值
String coin = "";
//把coins[1]中用coins[4]换掉就可以了
coin = coins[1];
coins[1] = coins[4];
coins[4] = coin;
//cosole显示结果
System.out.println(java.util.Arrays.toString(coins));
}
/**
* 其他方法皆有可能
*/
/**
* @param args
*/
public static void main(String[] args)
{
System.out.println("-----------======这样是不是你的要求=====-----------");
TestReverseCoin.ReverseAsTitle();
System.out.println("-----------=======利用Coin类对象=======-----------");
TestReverseCoin.ResverCoins();
System.out.println("-----------=======利用新数组=======-----------");
TestReverseCoin.ReverseNewString();
System.out.println("-----------====直接改值实现====-----------");
TestReverseCoin.ReverseAsArray();
}
}
Coin类源码:
package desc;
/**
* 硬币对象
* flag = true表示正面在上
* flag = false反面在上
* @author Administrator
*
*/
public class Coin {
private boolean flag;
public Coin() {
super();
}
public Coin(boolean flag) {
super();
this.flag = flag;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
/**
* 重写toString()
* ○ 代表正面
* ● 代表反面
*/
public String toString()
{
return flag?"○":"●";//三目运算控制返回值
}
}
java旋转硬币的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于旋转的硬币、java旋转硬币的信息别忘了在本站进行查找喔。
发布于:2022-11-29,除非注明,否则均为
原创文章,转载请注明出处。