Где / как я могу разрешить нечисловые значения в моей программе? - PullRequest
0 голосов
/ 15 сентября 2011

Я делаю эту маленькую программу, используя аргументы командной строки, у меня примерно 90% работы. Но я пытаюсь разрешить пользователю также вводить нечисловые значения ..

Пример ввода / вывода пользователя

Ввод:

$ java d1 4eb:16 10110110:2 407:8 2048:10

Выход:

4eb base 16 is 1259 base 10 10110110 base 2 is 182 base 10 407 base 8 is 263 base 10 2048 base 10 is 2048 base 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

Ответы [ 2 ]

1 голос
/ 15 сентября 2011

Вам нужно указать базу при первом вызове parseInt. Например, если вы анализируете шестнадцатеричное число, вам нужно указать:

val = Integer.parseInt(numbers[0], 16)

Вы получаете это исключение, потому что вы пытаетесь проанализировать шестнадцатеричное число в базе 10.

Может быть, вы должны сделать базу другим параметром командной строки. Я предполагаю, что это первый параметр командной строки. Тогда вы можете запустить:

int base = Integer.parseInt(args[0])
val = Integer.parseInt(number[0], base)
1 голос
/ 15 сентября 2011

По запросу, вот несколько подсказок.

Здесь возникает исключение:

val = Integer.parseInt(numbers[0]);

Вы всегда анализируете число перед двоеточием, как если бы оно было в базе 10, даже если это не так.

Кроме того, цель цикла for ускользает от меня. После того, как вы проанализировали число с использованием правильного радиуса, распечатать его в базе 10 очень просто.

...