Java扫描程序不接受负整数值,仅适用于正值

时间:2017-06-16 20:21:03

标签: java

我很难理解为什么我的程序仅在我输入正整数值时才起作用。我认为这与扫描仪有关,但有关它的更多信息是有帮助的。

import java.util.Scanner;

class integerThree {
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    int x = 0;
    int y = 0;
    int z = 0;
    int smallest = 0;
    int largest = 0;

    System.out.print("Enter first integer: ");
    x = input.nextInt();

    System.out.print("Enter second integer: ");
    y = input.nextInt();

    System.out.print("Enter third integer: ");
    z = input.nextInt();

    smallest = x;

    if (y < smallest) {
        smallest = y;
    }

    if (z < smallest) {
        smallest = z;

    largest = x;

    if (y > largest) {
        largest = y;
    }

    if (z > largest) {
        largest = z;
    }

    System.out.printf("%d+%d+%d=%d%n", x, y, z, (x+y+z));
    System.out.printf("%s=(%d+%d+%d)/3=%d%n", "Integer Avg", x, y, z, (x + y + z) / 3);
    System.out.printf("%d*%d*%d=%d%n", x, y, z, (x * y * z));
    System.out.printf("Of %d, %d, and %d %d is the smallest.%n", x, y, z, smallest);
    System.out.printf("Of %d, %d, and %d %d is the largest.%n", x, y, z, largest);
    }
  }
}

输出应该添加三个数字,找到三个数字的平均值,乘以它们,找到最低数字,最后找到最高数字。有没有办法让负面不会导致错误?

3 个答案:

答案 0 :(得分:1)

在你的第二个If语句之后,你似乎错过了一个右括号'}'。因此,只有最终输入值Z最小时,您的程序才会起作用。除了这个程序似乎对我有用。

所以改变你的第二个如果:

if (z < smallest) {
    smallest = z;
}

您还需要删除最后3个结束括号中的一个。

答案 1 :(得分:0)

您需要检入输入,因为用户无法输入负整数或零整数,如下所示。

        System.out.print("Enter positive integer: ");
        int validNumber;
        while (true) {
            int inputNumber = scanner.nextInt();
            if (inputNumber > 0) {
                validNumber = inputNumber;
                return;
            } else {
                System.out.println("integers <= 0 not allowed, try again");
            }
        }

答案 2 :(得分:0)

您的问题与括号有关。

根据您的代码,正确的缩进是:

if (z < smallest) {
    smallest = z;

    largest = x;

    if (y > largest) {
        largest = y;
    }

    if (z > largest) {
        largest = z;
    }

    System.out.printf("%d+%d+%d=%d%n", x, y, z, (x+y+z));
    System.out.printf("%s=(%d+%d+%d)/3=%d%n", "Integer Avg", x, y, z, (x + y + z) / 3);
    System.out.printf("%d*%d*%d=%d%n", x, y, z, (x * y * z));
    System.out.printf("Of %d, %d, and %d %d is the smallest.%n", x, y, z, smallest);
    System.out.printf("Of %d, %d, and %d %d is the largest.%n", x, y, z, largest);
}

仅当z小于smallest时,程序结尾附近的代码才会运行。确保您的{}匹配,并放置在您希望的位置。