返回 int 值的布尔方法;

Posted

技术标签:

【中文标题】返回 int 值的布尔方法;【英文标题】:Boolean method that returns an int value; 【发布时间】:2012-11-04 09:06:28 【问题描述】:

我正在自学 Java,并创建了一个程序来模拟掷骰子游戏。我有一个布尔方法的整个游戏。一切正常,但我想计算每次用户获胜的时间。计算这些胜利然后打印出来的最佳方法是什么?

这是我的代码:

import java.util.Random;

public class game

public static void main(String[] args) 
    Random rand = new Random();
    for(int i = 0; i <= 10; i++)
        craps(rand);
    


public static boolean craps(Random randomGen)
    int roll1 = randomGen.nextInt(6) + 1;
    int roll2 = randomGen.nextInt(6) + 1;

    int sum = roll1 + roll2;
    int sumRepeat = sum;
    int count = 0;


    String win = "you win";
    String lose = "you lose";
    String point = "point=";

    if(sum == 7 || sum == 11)
        System.out.printf("[%d,%d] %d %s\n",roll1,roll2,sum,win);
        count++;
        return true;
    
    else if(sum == 2 || sum == 3 || sum == 12)
        System.out.printf("[%d,%d] %d %s\n",roll1,roll2,sum,lose);
        return false;
    
    else
        System.out.printf("[%d,%d] %s %d",roll1,roll2,point,sum);
        int roll3 = randomGen.nextInt(6) + 1;
        int roll4 = randomGen.nextInt(6) + 1;
        int sum2 = roll3 + roll4;
        do
            roll3 = randomGen.nextInt(6) + 1;
            roll4 = randomGen.nextInt(6) + 1;
            sum2 = roll3 + roll4;
            if(sum2 == sumRepeat)
                System.out.printf("[%d,%d] %d %s\n",roll3,roll4,sum2,win);
                count++;
                return true;
            else
                System.out.printf("[%d,%d]",roll3,roll4);
            
        
        while(sum2 != 7);
            System.out.printf("[%d,%d] %d %s\n",roll3,roll4,sum2,lose);
            return false;
        
    


我试图返回 count 变量,但我收到一条错误消息,提示我无法从预期的布尔方法返回 int 值。但我也尝试使用System.out.println(); 打印出计数值,但我无法在代码中找到放置它的位置,因为我总是收到一条错误消息,指出 println 是无法访问的代码。

任何帮助将不胜感激。谢谢!

这是程序的输出

[1,6] 7 你赢了

[2,4] 点= 6[3,6][3,3] 6 你赢了

[3,3] 点= 6[5,1] 6 你赢了

[6,1] 7 你赢了

[6,3] 点= 9[5,1][3,5][2,6][6,4][5,6][1,5][6,3] 9 你赢了

[3,3] 点= 6[1,5] 6 你赢了

[5,1] 点= 6[1,5] 6 你赢了

[2,2] 点= 4[6,4][3,3][3,4][3,4] 7 你输了

[4,5] 点= 9[6,4][5,1][1,2][6,2][1,5][3,5][6,5][1,5 ][5,2][5,2] 7 你输了

[2,2] 点= 4[5,3][5,6][6,4][3,2][6,5][3,6][4,4][4,2 ][4,3][4,3] 7 你输了

[6,6] 12 你输了

您赢了 11 次。

【问题讨论】:

【参考方案1】:

craps 函数之外计算它们,这是一种简单的方法:

public static void main(String[] args) 
    Random rand = new Random();
    int counter = 0;
    for(int i = 0; i <= 10; i++)
        if(craps(rand)) counter++;
    

    System.out.println("You won " + counter + " times!");

顺便说一句,重要的是要注意,在craps 函数之外进行计数要比对其进行修改要好得多。在学习 java 时,请记住每种方法只应完成一项工作。您可能想练习将craps 函数分解成更小的部分来实践这一理念。 一项工作的一种方法理念将使大型项目在您以后回顾时更容易理解和调试。

【讨论】:

我实现了您的解决方案,它几乎可以按我的意愿工作。唯一的问题是每次玩游戏时都要计数。而不是每次用户赢得一轮时都计数。我将粘贴我的程序输出的副本,以使一切更清楚。再次感谢您的帮助。 如果你完全复制粘贴,它应该可以工作......除非你的craps函数总是返回true。我实际上并没有检查该功能,我只是假设它有效。【参考方案2】:
int wins = 0;
for(int i = 0; i <= 10; i++)
    if(craps(rand)) 
        wins++;
    


// Print a friendly message including `wins`

【讨论】:

以上是关于返回 int 值的布尔方法;的主要内容,如果未能解决你的问题,请参考以下文章

返回布尔值的 Java 方法的命名约定

一种返回布尔值的方法,该布尔值标识两个数组的值是不是相同

返回值为布尔值的方法

检查整数是不是为 0 并返回布尔值的简短方法

从调用 Int 的方法返回布尔值

学习笔记5