2013-10-14 21 views
0

我想弄清楚如何将特定基地中的任何值转换为其在不同基地中的相应表示。您将得到一个值,它的基数和该值需要转换为.dat文件中每行的值。Java基地转换程序给定的值,其基数和新基地

的3行中的.dat文件,其中在一条线上的第一个数字是值,随后它在基地

实施例,那么它需要的基转换为:

AB 16 10

我相信我已经想通了,除了如何在碱如16占字母值的18。请帮助:

public static void main(String args[]) throws IOException 
    { 
     Scanner file = new Scanner(new File("baseConversion.dat")); 
     //Keep looping while you can still read lines from the file 
     while (file.hasNextLine()) 
     { 
      //Read a line from the file -- read it as a string 
      String line = file.nextLine(); 

      int firstSpace = line.indexOf(" "); 
      int lastSpace = line.lastIndexOf(' ', line.length()); 
      String oldBase = line.substring(firstSpace + 1, lastSpace); 


      // Get the new base from the string 
      int newBase = Integer.parseInt(line.substring(lastSpace + 1)); 


      // Convert from the Old base to base 10 
      int numberInBase10 = convertToTen(line.substring(0, firstSpace), Integer.parseInt(oldBase)); 
      System.out.println("Converted " + line.substring(0, firstSpace) + " from base " + oldBase + " to " + 
      numberInBase10 + " in base 10\n"); 

      public static String convert(int numberInBase10, int base) 
      { 
      int quotient = numberInBase10/newBase; 
      int remainder = numberInBase10 % newBase; 

      if(quotient == 0) 
      { 
       return Integer.toString(remainder);  
      } 
      else 
      { 
       return convert(quotient, newBase) + Integer.toString(remainder); 
      } 
     } 

     // DO THIS Print out results 


     } 
     file.close(); 
    } 


    static int convertToTen(String num, int base) 
    { 

    int leng = num.length(); 
    int base10 = 0; 
    int remainder = 0; 
    int add = 0; 


     for(int i = leng-1; i >=0; i--) 
     { 
      int intValueForC = 0; 
      remainder = 0; 

      char c = num.charAt(leng-i-1); 
      if(!Character.isDigit(c)) 
      { 
       intValueForC = c - 55; 
      } 
      else 
      { 
       intValueForC = c - 48; 
      } 
      add +=(intValueForC * Math.pow(base, i)); 

     } 

     return add; 
    } 
} 
+0

它几乎是除了我想出了我在老问题中要求的部分,现在我有一个新的问题。 – user2880377

+0

沿着这些线:'if(digit> = base){digit ='A'+(digit - base)};'翻译成16或18个碱基时。只是一个想法。 –

回答

2

你太过于复杂了(除非这是家庭作业,你不允许使用库函数)。

String hex = "ABCDEF"; 
int decimal = Integer.parseInt(hex, 16); 
String binary = Integer.toString(decimal, 2);