2013-10-14 4 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); 
Смежные вопросы