无论用户输入什么,为什么此方法返回0?

时间:2016-01-06 18:06:26

标签: java

无论我输入什么输入,方法CountQiftPositiv都会返回0。我在这里做错了什么?

import java.util.Scanner;
public class QiftPositivCount 
{
    public static void main(String [] args)
    {
        Scanner scan = new Scanner(System.in);
        final int SENTINEL = -9999;
        int x = 0;
        int count = 0;
        do 
        {
            System.out.print("Type numbers (-9999 to end) : ");
            x = scan.nextInt();
            if(x == SENTINEL)
            {
                break;
            }
            count++;
        }while (x != SENTINEL);

        if(count == 0)
        {
            System.out.println("You didnt type any number");
        }
        else 
        {
            System.out.println("There are " + count + " numbers typed , and the numbers that fulfill the conditon are "
                               + CountQiftPositiv(x));
        }

    }

    private static int CountQiftPositiv(int nr)
    {
        int poz = 0;

        if(nr % 2 == 0 && nr % 3 == 0 && nr > 0)
        {
            poz++;
        }
        return poz;
    }
}

4 个答案:

答案 0 :(得分:1)

您在while循环之外使用CountQiftPositiv(x)

使用您拥有的代码,与调用CountQiftPositiv(-9999)

相同

我建议你做一些事情:

do {
  System.out.print("Type numbers (-9999 to end) : ");
  x = scan.nextInt();
  if(x == SENTINEL) {
    break;
  }
  if (CountQiftPositiv(x) > 0) { 
    count++;
  }
} while (x != SENTINEL);

我建议您重复修改循环,因为如果明智地使用break,则不需要x = scan.nextInt();

答案 1 :(得分:1)

您已返回0,因为上次输入为-9999为负数,此条件if(nr % 2 == 0 && nr % 3 == 0 && nr > 0)通常为false
尝试更改SENTINEL nymber:

答案 2 :(得分:1)

[UITextView setAttributedString]发送CountQiftPositiv(x),因为它的最后一个x值始终为>在-9999

时停止接受输入

x = -9999 - &gt; nr < 0将保持为0

我已经制作了一个poz变量来接受你的输入,如果输入不等于temp变量,它会设置SENTINEL因此删除x = temp传递给-9999的值。

此外,当您检查的数字是多个数字的因子时,您所要做的就是将这些数字相乘并检查该数字的模型。

对于CountQiftPositiv()2,您只需检查3

6

答案 3 :(得分:1)

您的do - while循环抛出所有用户输入,但输入的最后一个整数(如果有)除外。由于退出该循环(不计算异常)的唯一方法是标记值-9999,这是您将分配给x唯一值并传递给{{ 1}}。

同时,

CountQiftPositiv只返回CountQiftPositiv,如果正整数可被6整除。对于其他每个值,包括你的哨兵,它都会返回1

其他Sentinel问题

使用哨兵值几乎总是一个错误(除非你的作业特别指出)。迟早,那&#34;不可能&#34;输入实际上会显示出来。

由于您的目标是在用户完成之前继续循环(#34;是或否&#34;问题),请使用本地布尔变量,并测试 。此外,java.util.Scanner有很多有用的方法可以解决这种情况,例如:

0

循环实际上可以缩短为boolean done = false; while (! done) { if (scan.hasNextInt()) { // Store scan.nextInt() for use later. See below. } else { // No more (valid) inputs. done = true; } } ,但将循环的循环条件存储在变量中对于更复杂的退出决策非常方便。< / p>

存储用户输入

您永远不会存储多个用户输入。创建某种List来存储它们,然后对该列表进行操作。

while (scan.hasNextint()) { ... }

后来,在&#34;未完成&#34;循环:

java.util.List<Integer> numbers = new java.util.LinkedList<Integer>();

计算用户输入

不需要if (scan.hasNextInt()) { numbers.add(scan.nextInt()); } else { done = true; } ---您的整数集合将为您存储:

count

打印输出

最后,只有在满足奇怪条件时才输出每个数字。这假设您重写if (numbers.size() == 0) { System.out.println("You didn't type any numbers!"); } 以返回CountQiftPositiv(它几乎已经存在):

boolean

您可能希望重命名该方法,因为它不再算什么。

我把剩下的留给你了。

PS:在您学习时,将输入,处理和输出分成(至少)三种不同的方法尤其几乎总是一个好主意。理解一堆简短的方法比使用一个全部方法容易得多,并且使调试问题变得更容易