Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JAVA中添加二进制数。数字格式异常_Java_Binary - Fatal编程技术网

在JAVA中添加二进制数。数字格式异常

在JAVA中添加二进制数。数字格式异常,java,binary,Java,Binary,问题是当我输入十进制输入时。例如10001.10。 上面写着NumberFormatException。但当我只输入一个没有小数点的数字,比如“1001110”,它就可以正常工作了 import java.util.*; import java.util.Arrays; public class Binary { public static void main (String[] args) { Scanner in = new Scanner(System.in); S

问题是当我输入十进制输入时。例如10001.10。 上面写着NumberFormatException。但当我只输入一个没有小数点的数字,比如“1001110”,它就可以正常工作了

import java.util.*;
import java.util.Arrays;


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

    String[] Condition = { "0", "1", "." };

    //Accept First Input
    String numInp1="";      
    System.out.print("Enter First Binary Number: ");
    numInp1 = in.nextLine();

    //Accept Second Input
    String numInp2="";      
    System.out.print("Enter Second Binary Number: ");
    numInp2 = in.nextLine();

    //numInp1
    String _Array1 []=new String[numInp1.length()];
    //numInp2
    String _Array2 []=new String[numInp2.length()];

    //Catch error in numInp1/_Array1
     boolean flag1 = false;

     for(int i = 0; i < _Array1.length; i++)
     {
         _Array1[i] = String.valueOf(numInp1.charAt(i));
            int cnt = 0;
            for (int j = 0; j < Condition.length; j++)
            {
                if (!_Array1[i].equals(Condition[j]))
                {
                    cnt++;
                }
                else
                {
                    break;
                }
                if (cnt == 3)
                {
                    flag1 = true;
                }

            }

      }
    //Catch error in numInp2//_Array2
     boolean flag2 = false;

     for(int i = 0; i < _Array2.length; i++)
     {
           _Array2[i] = String.valueOf(numInp2.charAt(i));
           int cnt = 0;

            for (int j = 0; j < Condition.length; j++)
            {
                if (!_Array2[i].equals(Condition[j]))
                {
                    cnt++;
                }
                else
                {
                    break;
                }
                if (cnt == 3)
                {
                    flag2 = true;
                }
            }             
     }
     //Getting which of the Array has Higher Input
     if(flag2 == false && flag1 == false)
     {

        int HigherLength = 0;

        if(_Array1.length >= _Array2.length)
        {
            HigherLength = _Array1.length + _Array2.length;
        }
        else
        {
            HigherLength = _Array2.length + _Array1.length;
        }
    //Declaring the size of higher length as the size of Equals[] Array 
        int Equals[] = new int[HigherLength];   
        int _Array1Int[] = new int[_Array1.length];
        int _Array2Int[] = new int[_Array2.length];

      for(int i = 0;i<_Array1.length;i++)
      {
        if(_Array1[i].equals("."))
        {
            _Array1[i] = "6";

        }
        _Array1Int[i] = Integer.parseInt(_Array1[i]);
      }

      for(int i = 0;i<_Array2.length;i++)
      {
        if(_Array2[i].equals("."))
        {
            _Array2[i] = "6";

        }
        _Array2Int[i] = Integer.parseInt(_Array2[i]);
      }

     //_________________________

     int numInp1int = Integer.parseInt(numInp1);
     int numInp2int = Integer.parseInt(numInp2);




     int i,m,n,sum,carry=0;
    for(i=Equals.length-1;i>=0;i--)
    {
        m=numInp1int%10;
        n=numInp2int%10;
        numInp1int=numInp1int/10;
        numInp2int=numInp2int/10;
        sum=m+n+carry;  

        if(sum==1)
        {
          Equals[i]=1;
          carry=0;
        }

        else if(sum==2)
        {
            Equals[i]=0;
            carry=1;
        }

        else if(sum==3)
        {
            Equals[i]=1;
            carry=1;
        }

        else
        {
            Equals[i]=m+n+carry;
        }
    }

    String Equals1[] = new String[Equals.length];

    for(i=0;i<Equals.length;i++)
    {
        try{

        Equals1[i] = String.valueOf(Equals[i]);
        }
        catch (NumberFormatException nfe) 
        {
         nfe.printStackTrace();
        }
        if (Equals1[i].equals("6"))
        {
            Equals1[i] = ".";

        }
    System.out.print(Equals1[i]);
    }




    }
}
}
import java.util.*;
导入java.util.array;
公共类二进制文件{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(系统输入);
字符串[]条件={0”,“1”,“0};
//接受第一个输入
字符串numInp1=“”;
System.out.print(“输入第一个二进制数:”);
numInp1=in.nextLine();
//接受第二次输入
字符串numInp2=“”;
System.out.print(“输入第二个二进制数:”);
numInp2=in.nextLine();
//numInp1
字符串_Array1[]=新字符串[numInp1.length()];
//numInp2
字符串_Array2[]=新字符串[numInp2.length()];
//numInp1/_数组1中的捕获错误
布尔flag1=假;
对于(int i=0;i<_Array1.length;i++)
{
_Array1[i]=字符串.valueOf(numInp1.charAt(i));
int-cnt=0;
对于(int j=0;j=_Array2.length)
{
高长度=_Array1.length+_Array2.length;
}
其他的
{
高长度=_Array2.length+_Array1.length;
}
//将较大长度的大小声明为等于[]数组的大小
int等于[]=新的int[HigherLength];
int _Array1Int[]=新int[_Array1.length];
int _Array2Int[]=新int[_Array2.length];

对于(inti=0;i在代码中执行以下更改

删除以下2行-

int numInp1int = Integer.parseInt(numInp1);
int numInp2int = Integer.parseInt(numInp2);
替换为以下代码-

    StringBuilder strNum1 = new StringBuilder();
    for (int num : _Array1Int) 
    {
         strNum1.append(num);
    }
    int numInp1int = Integer.parseInt(strNum1.toString());


    StringBuilder strNum2 = new StringBuilder();
    for (int num : _Array2Int) 
    {
         strNum2.append(num);
    }
    int numInp2int = Integer.parseInt(strNum2.toString());

更新
\u Array1
\u Array2
不会更改您试图解析为整数的
numInp1int
numInp2int

您应该学习解释堆栈跟踪中的错误消息。在这里,您可以清楚地看到问题所在:

Exception in thread "main" java.lang.NumberFormatException: For input string: "10001.1"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.parseInt(Integer.java:615)
    at q35640801.Binary.main(Binary.java:120)

它在调用
parseInt()中
类的
Integer
。它无法解析像
10001.10

这样的十进制数。到目前为止,您是如何解决这个问题的?提示:如果您查看堆栈跟踪,您将立即看到问题所在。请这样做。Java不能有带小数的整数。在您试图解析的位置t numInp1int=Integer.parseInt(numInp1)或int numInp1int=Integer.parseInt(numInp1)即使是1.1或1.0也有小数位数。这就是为什么会出现数字格式异常。@user3509209但如果(_Array2[I]。等于(“.”){u Array2[I]=“6”},我已经这样做了。若要删除小数并临时将其更改为“6”并将其更改回“”当我将其转换为字符串时,您想更改为6?在numInp1int和numInp2int中?是的,哇,它工作正常,谢谢!您知道如何正确地输入小数点吗?对不起,我没有得到它,您正在将小数点替换为6,因此它与上面的代码一起工作,对吗?那么您的下一个问题是什么?您能将我的答案标记为正确吗?我尝试了重播g将小数点改为6,这样。如果Equals1[i]等于6,我将用“.”替换6。但当我这样做时,一个数字将被添加到6,而不是“.”。因为你已经用小数点替换了6,所以你永远不会得到这种情况。如果Equals1[i]等于6