Java:比较2个数字并消除较低的数字

时间:2018-11-17 18:17:56

标签: java

我正在做家庭作业,但是遇到一个我不知道如何编写头脑中的内容的问题。输入的数字数量未知。

输入(示例):1 2 2 3 4 10 4 3 4 5 6 7 10 11 11 11 11 5 6 7 8 9 10

OUTPUT:输出必须是一行中最大数量的不同数字(下一行定义)。我无法更好地表达这句话,但您稍后可能会明白我的意思。我将不同数字的数量称为NODN

ROW定义:只要下一个输入不少于上一个,就认为是1行。在示例中,我们有4行:

1 2 2 3 4 10,
4,
3 4 5 6 7 10 11 11 11 11,
5 6 7 8 9 10

期望的输出将是7,因为第三行将具有最大数量的不同数字。

仅允许我使用Scanner,int和boolean类型。代码的第一部分(至少我相信是这样)在第一行中获取了NODN,第二部分从第二行获取了数字。我想做的是比较这两个数字,消除较低的数字,然后继续比较直到它到达输入的末尾。我不知道如何保持较高的NODN值并继续进行比较。谢谢。

代码:

    while (sc.hasNextInt()) {
        preLast = last;
        last = sc.nextInt();
        if (last > preLast) {
            numberOfDiffNumbers++;
        }
        if (last < preLast) {
            while (sc.hasNextInt()) {
            preLast = last;
            last = sc.nextInt();
                if (last > preLast) {
                numberOfDiffNumbers2++;
                }
                if (last < preLast) {
                    break;
                }
            }

    }

3 个答案:

答案 0 :(得分:1)

这里是使用4个$post->category_id变量的想法:

int

答案 1 :(得分:0)

让我们考虑一下我们如何处理获得的每个新号码。也许我们还希望变量存储到目前为止最大的NODN,当前行中的数字数量以及最后读取的数字是什么。现在,当我们阅读每个数字时,以下任何一种可能性都是可能的:

  • 我们正在读取第一个数字
  • 下一个数字大于上一个数字
  • 下一个号码与上一个号码相同
  • 下一个数字小于上一个数字
  • 我们已经读完数字了

我试图在不给出太多代码的情况下提供一些帮助,但是对于上述每种情况,请考虑如何修改这3个变量(迄今为止的最高NODN,当前行的长度,前一个数字)< / p>

答案 2 :(得分:0)

好的,您需要一个提示,因此,如果正确填写,我将向您展示可以肯定的代码。

Scanner sc = new Scanner(line);
int maxElts = 0;
int elts = 0;
int last = Integer.MIN_VALUE;
// iterate over all of the integers
while (sc.hasNextInt()) {
    int x = sc.nextInt();
    if (x > last) {
        // TODO something to elts
    } else if (x < last) {
        // we're going to have to start over
        if (elts > maxElts) {
            // TODO but if the number of elts was higher ...
        }
        elts = ?; // TODO so how many elts are in the new row we've just found?
    }
    // we don't do anything for x == last - or should we?
    last = x;
}
// OK, but 
if (elts > maxElts) {
    // TODO but if the number of elts was higher ...
}
System.out.println(maxElts);

一些要带走的东西:

  • 考虑要循环的内容,在这种情况下,输入整数最有意义;
  • 思考您想记住的内容以及何时记住它;
  • 考虑如何初始化变量以及如何更改状态以及何时;
  • 您可能需要在循环之前或之后重复一些操作或采取特殊操作;
  • 不要重复测试两次,如果x > last那么肯定x < last就不必测试。