「java旋转硬币」旋转的硬币

博主:adminadmin 2022-11-29 04:36:06 54

今天给各位分享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旋转硬币的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-29,除非注明,否则均为首码项目网原创文章,转载请注明出处。