2014-12-02 87 views
0

我正在做一个任务,我必须有一个选项来询问用户是否想从任何基础转换为任何其他基础。这里是教练给我们的主:在不带ParseInt的Java中从一个基础转换为另一个基础

import java.util.*; 

public class CSCD210Lab21 
{ 
    public static void main(String [] args) 
    { 

     Scanner kb = new Scanner(System.in); 

     int choice; 

     do 
     { 
     choice = Lab21Methods.menu(kb); 

     switch(choice) 
     { 
      case 1: Lab21Methods.convert(kb, 10, 2, '0', '1'); 
        break; 

      case 2: Lab21Methods.convert(kb, 10, 8, '0', '1', '2', '3', '4', '5', '6', '7'); 
        break; 

      case 3: Lab21Methods.convert(kb, 10, 16, '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'); 
       break;   

      case 4: int fromBase = Lab21Methods.readBase(kb, "from");  
        char [] fromBaseValues = Lab21Methods.readBaseValues(kb, fromBase); 
        int toBase = Lab21Methods.readBase(kb, "to"); 
        char [] toBaseValues = Lab21Methods.readBaseValues(kb, toBase); 
        Lab21Methods.convert(kb, fromBase, fromBaseValues, toBase, toBaseValues); 
        break; 

      default: System.out.println("Thanks for using my silly base converter");  
     }// end switch 

     }while(choice != 5); 

    }// end main 

}// end class 

我关心的主要部分是在switch语句的情况下4。以下是我迄今为止:

public static char [] readBaseValues(Scanner kb, int baseVal) 
    { 
     kb = new Scanner(System.in); 
     System.out.print("Enter Base: "); 
     baseVal = kb.nextInt(); 
     kb.nextLine(); 
     char valArray[] = new char[baseVal]; 

     for(int i=0; i < valArray.length; i++) 
     { 
     System.out.print("Enter Base Value: "); 
     valArray[i] = kb.nextLine().charAt(0); 
     }  
     System.out.print(valArray); 
     return valArray; 
    } 
    public static int readBase(Scanner kb, String type) 
    { 
     System.out.println(); 
     System.out.print("Enter Base To Convert "+type+" : "); 
     int num = kb.nextInt(); 
     return num; 
    } 

我有不知道如何进行转换说一个基地10到基地2不使用parseInt函数。他说,如果我们使用ParseInt,我们会得到0分。我还能如何继续?

+0

BigInteger呢?他有没有提到它? – 2014-12-02 23:11:19

+0

撰写: 您可能不会使用任何Java方法/类进行基础转换。你必须编写你自己的代码。 – dhjdsh 2014-12-02 23:12:36

+0

对不起,我错过了那部分。 – 2014-12-02 23:13:00

回答

0

我认为最好的做法是使用低级别字符的投射。

你所做的是将char值转换为低电平也是一个数字。所以:

(int) '0'==48 //true 

你可以做的是说

String in = "1234"; 
int sum = 0; 
for(char c: in.toCharArray()) 
    sum += ((int) c)-48; 

为基地的转换,使用模运算。在Java中,您使用'%'操作:9%5 = 4。

例如至9转换为基体5,我们做:

  1. 9/5 = 1,9%5 = 4
  2. 1/5 = 0,9%5 = 1

每次传播前一个分支的其余部分。现在基数为5的总数现在是'14',您只需将模数运算依次写出即可。

0

您必须实施convert()作为您自己的parseInt()String.valueOf()版本。方法参数给出了输入和输出的基数,表示这些数字的符号,以及符号的位置值,它们以其在数位数组中的索引的形式出现。

您需要按字符处理输入字符,找到每个字符的位置值,并使用基数和数字的位置值构建数字值。然后,您需要执行相反操作,将结果数字转换为在输出基数和符号中表示的数字字符串。

由于数字符号是作为输入给出的,因此您不应该假设它们的值与相应的位置值之间有任何特定的关系(例如,程序似乎不会被限制为使'0'为具有位置值的数字0)。