【问题标题】:How to fix my counter which increments each time a certain # is selected?如何修复每次选择某个 # 时递增的计数器?
【发布时间】:2013-06-10 20:32:38
【问题描述】:

我正在做一个猜谜游戏。计算机从 R/B/G/Y 中随机抽取 3 个字母,用户尝试猜测组合的正确顺序和位置。计数器递增以给出提示,即。计算用户每次猜测正确的字母和/或位置,直到缩小范围。

这是我随机化计算机组合的方法:

public static void newGame(){
// Randomize colour choice (# between 1 and 4)
col1 = (int)(Math.random()*4)+1;
col2 = (int)(Math.random()*4)+1;
col3 = (int)(Math.random()*4)+1;

switch ((int)col1){
    case 1: ans1 = ("R");
        break;
    case 2: ans1 = ("G");
        break;
    case 3: ans1 = ("B");
        break;
    case 4: ans1 = ("Y");
        break;
}
switch ((int)col2){
    case 1: ans2 = ("R");
        break;
    case 2: ans2 = ("G");
        break;
    case 3: ans2 = ("B");
        break;
    case 4: ans2 = ("Y");
        break;
}
switch ((int)col3){
    case 1: ans3 = ("R");
        break;
    case 2: ans3 = ("G");
        break;
    case 3: ans3 = ("B");
        break;
    case 4: ans3 = ("Y");
        break;
}
colchoice = ans1 + " " + ans2 + " " + ans3;

}//end newGame method

这些是我的计数器方法:

public static void checkColoursCorrect(){
inputnumber(guess1,guess2,guess3);
// Determine how many user inputted letters equal the randomized ones
correctc = 0;
if (uguess1 == col1 || uguess1 == col2 || uguess1 == col3){
    correctc++;
}
if (uguess2 == col1 || uguess2 == col2 || uguess2 == col3){
    correctc++;
}
if (uguess3 == col1 || uguess3 == col2 || uguess3 == col3){
    correctc++;
}
}//end checkColoursCorrect method

public static void checkPositionsCorrect(){
inputnumber(guess1,guess2,guess3);
correctp = 0;
if (uguess1 == col1){
    correctp++;
}
if (uguess2 == col2){
    correctp++;
}
if (uguess3 == col3){
    correctp++;
}
if (uguess1 == col1 && uguess2 == col2 && uguess3 == col3){
    System.out.println("User wins! Colour was " + colchoice);
}
}//end checkPositionsCorrect method

我认为,由于组合是随机的,每次计数器方法调用 col1/col2/col3 时,都会使用新组合而不是最初初始化的组合?如果有人能指出如何解决这个问题,我将不胜感激。

输入数字方法:

public static void inputnumber(String guess1, String guess2, String guess3){
// Convert user's FIRST guess to a number
if ("R".equals(guess1)){
    uguess1 = 1;
}
if ("G".equals(guess1)){
    uguess1 = 2;
}
if ("B".equals(guess1)){
    uguess1 = 3;
}
if ("Y".equals(guess1)){
    uguess1 = 4;
}

// Convert user's SECOND guess to a number
if ("R".equals(guess2)){
    uguess2 = 1;
}
if ("G".equals(guess2)){
    uguess2 = 2;
}
if ("B".equals(guess2)){
    uguess2 = 3;
}
if ("Y".equals(guess2)){
    uguess2 = 4;
}

// Convert user's FINAL guess to a number
if ("R".equals(guess3)){
    uguess3 = 1;
}
if ("G".equals(guess3)){
    uguess3 = 2;
}
if ("B".equals(guess3)){
    uguess3 = 3;
}
if ("Y".equals(guess3)){
    uguess3 = 4;
}
}

【问题讨论】:

  • 能否提供inputnumber方法...

标签: java if-statement random counter


【解决方案1】:

据我了解,您希望在代码的第一行中获取 col1、col2 和 col3 的随机值。 我认为 Java 可能与 C 有相同的态度,因此您需要在代码中创建一个随机数生成器,以便每次运行程序时获取新的随机数。否则,您只会在编译时获得一次随机数。 在link,您可以查看 Oracle 的 Random 类文档。您可能需要创建一个生成器(使用 new Random()),然后是 newInt(),以便稍后在代码中获取随机 int 值。

当您注意到并发修改时,确保您不会从不同的方法访问相同的字段是第一要检查的。

【讨论】:

  • 这不是我的问题...我的问题是当我调用计数器方法时随机数会发生变化——它们不应该这样,以便我的计数器准确地反映结果。
  • 我很确定,如果你尝试了我写的方法,它会奏效。它们只会在您调用 nextInt() 时生成。
  • ?我已经有一个随机数生成器。这是我的方法 newGame() 中的 Math.random() 类。我真的不明白你在暗示什么。我的问题不在于我的随机数,而在于我的计数器。
  • 您确定不访问 newGame() 和 counter 方法之间的 col1..3 字段吗?
  • 我猜这改变了整个观点。如果您的计算机播放器也将 col1...3 随机化,它们将被更改,因为它们是您班级的字段。因此,可以从此类中的每个方法访问它们,并且当它们通过引用传递给方法时(就像 Java 中的所有内容一样),它们会发生变化。变量 col1、col2 和 col3 是(看起来)你的类的字段,它们没有被装箱在任何方法中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 2017-12-30
相关资源
最近更新 更多