【问题标题】:Create random generator to make and count odd even pairs of numbers创建随机生成器以生成和计算奇偶数对
【发布时间】:2020-02-28 05:50:15
【问题描述】:

我真的,真的很困惑,很困惑。我已经上网搜索了好几次,但找不到任何可以帮助我解决这个精确的作业问题的东西。

涉及:Java、while 循环、随机生成数字和扫描仪控制台输入。

我们必须在 main 方法中完成代码,以便它从控制台获取两个单独的输入并生成一些“滚动”,然后当它们是一对数字时显示结果,一个偶数,一个奇数。

编辑:有人指出我的措辞令人困惑。 Joseph Larson 措辞更好:

“你是要求随机数的上界,然后运行多少次,对吗?”是的,就是这样。

我有两个主要问题。如果这些都解决了,我很确定我能解决剩下的问题。

1) 我知道我应该做一些事情来完成 while 循环,但我尝试过的都没有得到所需的结果。

2) 我认为我错误地声明了 randUpBound 和 oddeven 项,但我无法弄清楚如果我有我可能做错了什么。

最奇怪的部分是我的大多数尝试都创建了一个空白的无限循环——什么都没有显示,但 IntelliJ 发誓程序正在运行,并且在我让它停止之前它不会停止。甚至引号中的字符串都不会出现。

下面的预期显示和代码。我已经把//添加到我的代码所在的行,并留在老师的说明中。

感谢您提供的任何帮助!

预期展示

输入随机上限? 12

输入要计数的奇偶对数? 2

掷出的数字:11、2

  1. 找到奇数+偶数对! 11,2

掷出的数字:1、8

  1. 找到奇数+偶数对! 1、8

掷出的数字:1、1

总卷数:6

代码

导入 java.util.*; //添加

公共类 OddEvenPairs { public static void main(String[] args) {

    //.....[add in missing code here - make declarations and add console input for the random number upper bound,
    // and the number of odd-even pairs to be counted]

    //read two consecutive numbers - fencepost
    Scanner console = new Scanner(System.in); //added
    Random rand = new Random(); //added

    int randUpBound = console.nextInt(); //added
    int oddeven = console.nextInt(); // added
    System.out.println("Enter random upper bound? " + randUpBound); //added
    System.out.println("Enter number of odd even pairs to count? " + oddeven); //added

    int roll1 = rand.nextInt(randUpBound);
    int roll2 = rand.nextInt(randUpBound);
    System.out.println("Numbers  " + roll1 + ", " + roll2);
    int rollcount = 2;

    int oddEvenNum = roll1 + roll2;

    //process the numbers
    while (oddeven < oddEvenNum) {
        oddeven = oddEvenPair(roll1, roll2, oddeven);
        roll1 = rand.nextInt(randUpBound);
        roll2 = rand.nextInt(randUpBound);
        System.out.println("Numbers  " + roll1 + ", " + roll2);
        rollcount += 2;
        //.....[complete missing code here]

    }

}

//method to figure out odd-even pair
public static int oddEvenPair(int roll1, int roll2, int oddeven) {
    //boolean oddEvenFound = false;
    if (roll1 % 2 == 1) {

        if (roll2 % 2 == 0) {
            //oddEvenFound = true;
            oddeven++;
            System.out.println("Odd even " + oddeven);
            System.out.println("Odd+even pair found!" + roll1 + "," + roll2);
        }
    }
    return oddeven;

}

}

【问题讨论】:

  • 好的,你的问题的措辞令人困惑,所以我会尝试重新措辞。你是求随机数的上界,然后运行几次,对吗?因此,如果我输入 35 和 17,那么 17 次您将生成从 0 到 35 的两个数字,然后输出它是奇数、偶数还是各一个。是吗?
  • 是的,没错。很抱歉没有说得更清楚。

标签: java random while-loop console-input


【解决方案1】:

好的,您的代码存在一些问题。首先,这个:

int randUpBound = console.nextInt(); //added
int oddeven = console.nextInt(); // added
System.out.println("Enter random upper bound? " + randUpBound); //added
System.out.println("Enter number of odd even pairs to count? " + oddeven); //added

这些将按顺序发生,这意味着您将接受来自控制台的输入,然后提示用户。这会令人困惑。

接下来,我会将oddeven 的变量名称更改为“numberOfTries”之类的名称。 Oddeven 并没有真正解释它的真正用途。

一旦你有了这两个数字,你就需要一个循环。

for (int thisTry = 1; thisTry <= numberOfTries; ++thisTry) {
    ...
}

这将使您的代码运行适当的次数。

在该循环内,您将生成两个随机数,然后调用您的 oddEvenPair 方法。然后打印出结果。

你的函数真的很奇怪,可能没有做你想做的事。

事情就是这样。你让自己因为一次想太多而感到困惑。把它分解。你会如何在纸上做到这一点?把它分成小块。你真的有 5 个:

-从用户那里获取数据(有提示)

-循环适当的次数

-在合适的范围内生成两个随机数

-确定两个奇数/两个偶数/一个

-打印结果

从这些方面考虑事情,然后每个步骤的代码量真的很小。

【讨论】:

  • “oddeven”是我的老师输入的,你说得对,这真的很令人困惑,尤其是另外两个“奇怪”的名字。如果我将 int 值放在提示之后,如何处理提示无法识别变量 randUpBound 和 numberOfTries?我知道(因为偶然这样做)Java 不喜欢具有不同分配的两个变量。它必须是一个“while”循环——分配是使用这些东西的单元的一部分。 for循环可以进去吗?
  • 从头开始 int 值部分 - 我刚刚了解到我不需要调用它们。 (这很尴尬。)关于交换提示和变量的建议很有帮助。该程序的那部分现在可以工作了。现在我需要在只打印一对后停止循环。我确实在 while 循环中尝试了 for 循环,但它没有帮助。
  • 是的!谢谢约瑟夫的这些建议。我现在几乎已经让代码工作了。你的建议给了我一些我需要弄清楚我还需要做什么的东西! (我也怀疑,因为我的老师在她生病并取消课程时写了这篇文章,所以她可能犯了一些错误。)编辑:它正在工作!
  • @Ennesby 非常棒。当您遇到困难时,编程可能会令人沮丧,但解决问题却很有趣。我希望你喜欢它。
猜你喜欢
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-05
  • 1970-01-01
相关资源
最近更新 更多