如何测试多个输入以检测负数,同时记录哪些输入为负数?

时间:2014-09-02 19:22:30

标签: java integer int

我正在编写一个简短的程序来提示用户输入数字,然后我会测试它们是否为负数并报告哪些数据通过了此测试。我正在寻找一种避免为每个预期输入重复逻辑的方法。

这是我到目前为止所拥有的:

import java.util.Scanner;

public class Negative
{
    public static void main(String[] arg)
    {
        Scanner scan = new Scanner(System.in); 
        System.out.println("Insert three integers, USER.");
        int x = scan.nextInt();
        int y = scan.nextInt();
        int z = scan.nextInt();
        if (x < 0 || y < 0 || z < 0)  
        {
          System.out.println("A number is negative.");
        }
    }
}

我知道我可以单独完成这些,但我想以某种方式压缩代码。

3 个答案:

答案 0 :(得分:1)

您始终可以创建一个方法,该方法接受变量 namevalue,然后将其打印出来。像,

private static void display(String name, int val) {
    if (val >= 0) {
        System.out.printf("%s (%d) is NOT negative%n", name, val);
    } else {
        System.out.printf("%s (%d) is negative%n", name, val);
    }
}

然后你可以拨打display()

public static void main(String[] arg) {
    Scanner scan = new Scanner(System.in);
    System.out.println("Insert three integers, USER.");
    display("x", scan.nextInt());
    display("y", scan.nextInt());
    display("z", scan.nextInt());
}

现在它实际上并不存储xyz。如果您以后需要它们,那么您确实需要

public static void main(String[] arg) {
    Scanner scan = new Scanner(System.in);
    System.out.println("Insert three integers, USER.");
    int x = scan.nextInt();
    int y = scan.nextInt();
    int z = scan.nextInt();
    display("x", x);
    display("y", y);
    display("z", z);
    // do something else with x,y or z
}

答案 1 :(得分:0)

您还可以使用Google guava preconditions语句使其更清晰。

例如,上面的代码可以更改..

    import com.google.common.base.Preconditions.*;
   public class Negative
{
    public static void main(String[] arg)
    {
        Scanner scan = new Scanner(System.in); 
        System.out.println("Insert three integers, USER.");
        int x = scan.nextInt();
        int y = scan.nextInt();
        int z = scan.nextInt();
        Preconditions.checkArgument(x < 0 || y < 0 || z < 0 ,"Negative number entered");
    }
}

如果参数失败,则会抛出IllegalArgumentException。 更多文档here

希望这会有所帮助..

答案 2 :(得分:0)

你可以通过简单地应用循环直到用户输入正数来实现: -

int x = scan.nextInt();
int y = scan.nextInt();
int z = scan.nextInt();
while(x<0||y<0||z<0)
{
     x = scan.nextInt();
     y = scan.nextInt();
     z = scan.nextInt();
}