0

これが私が持っているものです(これは私のコード全体からの抜粋です):

int num = (int) Math.random()*100;
    switch(num)
    {
    case 0 : compChoice = "R";break;
    case 1 : compChoice = "P";break;
    case 2 : compChoice = "S";break;
    }

乱数を0、1、または2だけにするにはどうすればよいですか?

後で説明するreturnステートメントでは、ここで取得した文字は「null」になると書かれています。

それが役立つ場合は、コード全体を次に示します。

import java.util.Scanner;
import static java.lang.System.*;

public class RockPaperScissors
{
private String playChoice;
private String compChoice;

public RockPaperScissors()
{



}

public RockPaperScissors(String player)
{
    playChoice = player;
}

public void setPlayers(String player)
{
    playChoice = player;
    int num = (int) Math.random()*100 %3;
    switch(num)
    {
    case 0 : compChoice = "R";break;
    case 1 : compChoice = "P";break;
    case 2 : compChoice = "S";break;
    }
    out.print(compChoice);
}

public String determineWinner()
{
    String winner="";

    if(playChoice == "R")
    {
        switch(compChoice)
        {
        case "R" : winner = "!Draw Game!";break;
        case "P" : winner = "!Computer wins <<Paper Covers Rock>>!";break;
        case "S" : winner = "!Player wins <<Rock Breaks Scissors>>!";break;
        }
    }
    else if(playChoice == "P")
    {
        switch(compChoice)
        {
        case "R" : winner = "!Player wins <<Paper Covers Rock>>!";break;
        case "P" : winner = "!Draw Game!";break;
        case "S" : winner = "!Computer wins <<Scissors Cuts Paper>>!";break;
        }
    }
    else if(playChoice == "S")
    {
        switch(compChoice)
        {
        case "R" : winner = "!Computer wins <<Rock Breaks Scissors>>!";break;
        case "P" : winner = "!Player wins <<Scissors Cuts Paper>>!";break;
        case "S" : winner = "!Draw Game!";break;
        }
    }
    return winner;
}

public String toString()
{
    String output="";

    output = "player had " + playChoice + "\n computer had " + compChoice + "\n " + determineWinner();

    return output;
}
}

誰かが私がどこにもメソッドを呼び出していないことを指摘したので、これが私のランナークラスです:

import java.util.Scanner;
import static java.lang.System.*;

public class Lab10d
{
public static void main(String args[])
{
    Scanner keyboard = new Scanner(System.in);
    char response;

    //add in a do while loop after you get the basics up and running

        String player = "";

        out.print("Rock-Paper-Scissors - pick your weapon [R,P,S] :: ");

        //read in the player value
        player = keyboard.next();

        RockPaperScissors game = new RockPaperScissors(player);
        game.determineWinner();
        out.println(game);
            while(response == response)
    {
        out.print("Rock-Paper-Scissors - pick your weapon [R,P,S] :: ");
        player = keyboard.next();
        game.setPlayers(player);
        game.determineWinner();
        out.println(game + "\n");
        out.println("would you like to play again? (y/n):: ");
        response = (char) keyboard.next();




    }

}
}
4

4 に答える 4

2

モジュロ演算子を使用します。

int num = (int) Math.random()*100 % 3;

Math.random()は、0から1までの疑似ランダム値を返します。

100を掛けると、0から100までの数値(10進値付き)になります。

10進値を削除するためにキャストする(int)と、言語に10進値がある場合はMath.floor()と同じになります。

Modulo 3は、3によるダイビングのリマンダーです。たとえば、55/3 = 18の余り1(つまり、(18 * 3)+ 1 = 55)。

于 2012-11-07T23:30:37.067 に答える
2

Math.random()0から1までの浮動小数点値を返します。

これに3を掛けると、0から3までの浮動小数点値が得られます。

浮動小数点値を整数にキャストすると、0、1、または2になります。

すなわちint v = (int) (Math.random() * 3);

単純な乗算が怖い場合は、java.util.Randomクラスがあります。できるよ:

/** Re-usable source of random numbers */
private Random rand = new Random();

/** Choose a value of 0, 1, or 2 */
public int myChoice() {
    int v = rand.nextInt(3);
    return v;
}

Randomインスタンスを使用すると、より高度な乱数ジェネレーターをプラグインできます。これは、確率論的実験を行う場合に必要になります。

于 2012-11-08T00:11:09.450 に答える
0

さまざまなコメントに基づいて、私は別のアプローチを試してみたかった。コードをIDEにコピーして、実行しました。

public class NewMain {
    public static void main(String[] args) {
        int num;
        String compChoice = "";
        for (int ii = 0; ii < 10; ii++) {
            num = (int) (Math.random() * 100) % 3;

            switch (num) {
                case 0:
                    compChoice = "R";
                    break;
                case 1:
                    compChoice = "P";
                    break;
                case 2:
                    compChoice = "S";
                    break;
            }

            System.out.println(num + " " + compChoice);
        }
    }
}

Gregmacのアプローチは問題ありません。()のセットが不足しているだけです。あなたのコードが実際にあなたが上で与えたコードであり、compChoiceが常にnullである場合、何かひどく間違っています。

于 2012-11-07T23:52:18.807 に答える
0

これを行う良い方法は、乗算した後に数値を丸めることだと思いました。私はあなたの何人かが答えたようにそれを動かすことができませんでしたが、これはどうですか?:

var a=Math.random()*3;
var num=Math.round(a);
switch(num)
{
case 0 : compChoice = "R";break;
case 1 : compChoice = "P";break;
case 2 : compChoice = "S";break;
}
于 2013-04-17T08:37:55.617 に答える