Java 在哪里/如何在程序中允许非数值?
我使用命令行参数制作这个小程序,我完成了90%的工作。但是我也尝试允许用户输入非数值 用户输入/输出示例 输入:Java 在哪里/如何在程序中允许非数值?,java,algorithm,parseint,Java,Algorithm,Parseint,我使用命令行参数制作这个小程序,我完成了90%的工作。但是我也尝试允许用户输入非数值 用户输入/输出示例 输入: $javad14eb:16 10110110:2407:8 2048:10 输出: 4eb基数16是1259基数10 10110基2是182基10 407基8是263基10 2048基准10是2048基准10 我唯一的问题是第一次输入,因为它有字母,它给了我一个数字异常错误。任何帮助都是非常好的,我更希望得到正确方向的帮助,而不仅仅是答案。谢谢大家! public class hom
$javad14eb:16 10110110:2407:8 2048:10
输出:
4eb基数16是1259基数10
10110基2是182基10
407基8是263基10
2048基准10是2048基准10
我唯一的问题是第一次输入,因为它有字母,它给了我一个数字异常错误。任何帮助都是非常好的,我更希望得到正确方向的帮助,而不仅仅是答案。谢谢大家!
public class homework{
public static void main (String[] args){
int answer1=0,check1=0,check2=0,x=0, val=0,rad=0; //holds integer values user gives and check for : handler, answer etc
do{ //will continue to loop if no : inputted
for (x=0;x<args.length;x++){
check1=args[x].indexOf(":"); //checks input1 for the :
if(check1==-1){System.out.println("No Colon Found in "+args[x]+".");check1=0;}
else{
String numbers [] = args[x].split(":"); //splits the string at :
val = Integer.parseInt(numbers[0]); //parses [0] to int and assigns to val
rad = Integer.parseInt(numbers[1]); //parses [1] to int and assigns to rad
if(val==0||rad==0){System.out.println("The argument "+args[x]+" could not be converted.");check2=0;}
else{
for (int i = 0; val > Math.pow(rad, i); i++){
int digit = (val / (int) Math.pow(10, i)) % 10;
int digitValue = (int) (digit * Math.pow(rad, i));
answer1 += digitValue;}
answer1 = Integer.parseInt(numbers[0], rad); //finds the answer in base10.
System.out.println(val+" base "+rad+" is "+answer1+" base 10."); //gives user the results
}}}}while(check1==-1); }} //if user forgot : loop
公共课堂作业{
公共静态void main(字符串[]args){
int answer1=0,check1=0,check2=0,x=0,val=0,rad=0;//保存用户给出的整数值并检查:handler,answer等
如果输入“否”,则do{//将继续循环
for(x=0;x Math.pow(rad,i);i++){
整数位数=(val/(int)Math.pow(10,i))%10;
int digitValue=(int)(数字*数学功率(rad,i));
answer1+=digitValue;}
answer1=Integer.parseInt(数字[0],rad);//在base10中查找答案。
System.out.println(val+“base”+rad+“是”+answer1+“base 10”);//给用户结果
}}}}while(check1==-1);}//如果用户忘记了:循环
根据要求,这里有一些提示
例外情况如下:
val = Integer.parseInt(numbers[0]);
您总是在解析冒号之前的数字,就好像它在10进制中一样,即使它不是
同样,我也不知道
for
循环的目的。使用正确的基数解析数字后,以10为基数打印出来非常简单。第一次调用parseInt时,需要指定基数。例如,如果要分析十六进制数,则需要指定:
val = Integer.parseInt(numbers[0], 16)
您收到此异常是因为您试图解析以10为基数的十六进制数
也许您应该将base设置为另一个命令行参数。我假设它是第一个命令行参数。然后你可以跑:
int base = Integer.parseInt(args[0])
val = Integer.parseInt(number[0], base)