在没有ParseInt的情况下,在Java中从一个Base转换为另一个

时间:2014-12-02 23:04:13

标签: 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语句中的case 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;
   }

我不知道如何在不使用ParseInt的情况下将基数10转换为基数2。他说如果我们使用ParseInt,我们得到0分。我还怎么办?

2 个答案:

答案 0 :(得分:0)

我认为最好的办法就是使用低级别的角色。

你要做的是转换char值,这也是一个低级别的数字。所以:

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

你能做的就是说

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

对于base的转换,您使用模运算。在Java中,您使用'%'操作:9%5 = 4。

例如,要将9转换为基数5,我们可以:

  1. 9/5 = 1,9%5 = 4
  2. 1/5 = 0,9%5 = 1
  3. 每次传播前一个分割的剩余部分。 base-5的总数现在是'14',你只需要互相编写模数运算。

答案 1 :(得分:0)

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

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

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