在JAVA中添加二进制数。数字格式异常
问题是当我输入十进制输入时。例如10001.10。 上面写着NumberFormatException。但当我只输入一个没有小数点的数字,比如“1001110”,它就可以正常工作了在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
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