我是Java的新手。我编写了一个添加两个数字的Java程序。无法将总和显示为int。

时间:2017-03-01 20:14:54

标签: java

您好我是Java语言的新手,我的教授给了我们一份并不太复杂的任务。我已经完成了大部分工作。这就是我们应该做的事情。如果输入两个整数,则总和应为int。如果输入两个双打,则总和应为双倍。如果两者中的任何一个是双,那么总和也应该是一个双。如果两者中的任何一个可以作为二进制数进行解释,则应将其视为二进制数。最后,如果两个数字都是二进制,那么总和应该以二进制显示。我到目前为止的代码,做了所有的事情,除非我输入两个整数,它给了我一个双倍的总和,有人可以建议我应该在哪里修改它吗?

到目前为止,这是我的代码:

import java.util.Scanner;

public class ProjectZero 
{

    public static void main(String[] args) 
    {
        Scanner cin = new Scanner(System.in);
        cin.useRadix(2);

        System.out.print("Enter two numbers separated by a space: ");

        if (cin.hasNextInt()) 
        {
            int first = cin.nextInt();

            if (cin.hasNextInt()) 
            {
                int second = cin.nextInt();
                bigFunction(first, second);
            } 
            else if (cin.hasNextDouble()) 
            {
                double second = cin.nextDouble();
                bigFunction(first,second);
            } 
            else 
                System.out.println("Please try again and enter numbers.");
        } 
        else if (cin.hasNextDouble()) 
        {
            double first = cin.nextDouble();

            if (cin.hasNextDouble()) 
            {
                double second = cin.nextDouble();
                bigFunction(first,second);
            } 
            else 
                System.out.println("Please try again and enter numbers.");
        } 
        else 
            System.out.println("Please try again and enter numbers.");

        cin.close();    
    }

    public static void bigFunction(int a, int b) 
    {
        int sum = a + b;
        System.out.print("The sum of " + Integer.toBinaryString(a) + " (Decimal value: " + a + ")");
        System.out.println(" and " + Integer.toBinaryString(b) + " (Decimal value: " + b  + ")" + " is " + Integer.toBinaryString(sum));
    }

    public static void bigFunction(double a, double b) 
    {
        double sum = a + b; 
        System.out.println("The sum of " + a + " and " + b + " is " + sum);
    }


}

5 个答案:

答案 0 :(得分:0)

更容易回答

而不是if .hasNextDouble

if (first % 1 ==0)
{
//you have an integer
}
else
{
//it is not an integer
}

%表示模数,它基本上除了某些东西并检查是否存在余数,如果在将数字除以1之后有余数则不是int

答案 1 :(得分:0)

最简单的方法是将两个输入读作字符串。然后检查字符串以查看它们是否仅包含数字0和1(如果是,则为二进制数)。如果不是二进制,请检查它是否可以解释为double。如果是这样,转换为int并查看它是否是相同的值(然后它是一个int)。如果它不能被读作双精度格式,则格式错误。请注意,您可能必须考虑数字是否太大而不适合int或long等等。

答案 2 :(得分:0)

当输入的两个都是int时,你得到和的原因是因为你正在改变扫描器的默认基数,因此它无法将输入识别为int而是将其读作double。

如果你不改变扫描仪的基数,它将使用默认基数(10)和基数10处的扫描输入。现在这将适用于输入:int&双;但不适用于二进制输入。所有这些归结为您对实施的选择,我认为您不能用当前的方法来满足所有必需的输入。我建议遵循@FredK方法并将输入作为字符串(即使这种方法有它自己的缺陷)。

答案 3 :(得分:-1)

您无法检查输入的两个数字是否实际上是两个单独的整数。而且,你要求两个双参数,你的总和也是一个双倍,所以当你把它们放入bigFunction时,你总是把它们加到双打中,总和是双倍的,所以你总是得到一个双

您需要检查bigFunction函数内部以检查它们是否实际上是两个双打或两个整数等。

或者实际上是制作单独的功能,但总是争取懒惰!

希望能让齿轮搅拌!

答案 4 :(得分:-2)

在java中,如果运行代码

,则整数是double的形式
int a =4
int b =5
double b = a +c
System.out.print(b);

这可以用作整数是double的形式。

最简单的方法是将双重方法重命名为其他方法

最佳解决方案

userinput(double)= variable

if ((variable == Math.floor(variable)) 

这轮数字是这样的5.9将是5,如果它等于变量你有一个int。