Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中不使用ParseInt从一个基转换为另一个基_Java - Fatal编程技术网

在Java中不使用ParseInt从一个基转换为另一个基

在Java中不使用ParseInt从一个基转换为另一个基,java,Java,我正在做一个作业,我必须有一个选项来询问用户是否希望从任何基转换到任何其他基。以下是讲师给我们的主要建议: import java.util.*; public class CSCD210Lab21 { public static void main(String [] args) { Scanner kb = new Scanner(System.in); int choice; do { choice =

我正在做一个作业,我必须有一个选项来询问用户是否希望从任何基转换到任何其他基。以下是讲师给我们的主要建议:

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;
   }
publicstaticchar[]readBaseValues(扫描器kb,int baseVal)
{
kb=新扫描仪(System.in);
系统输出打印(“输入基:”;
baseVal=kb.nextInt();
kb.nextLine();
char valArray[]=新字符[baseVal];
for(int i=0;i

我不知道如何在不使用ParseInt的情况下将基数10转换为基数2。他说如果我们使用ParseInt,我们会得到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,我们需要:

  • 9/5=1,9%5=4
  • 1/5=0,9%5=1

  • 每次你传播上一部的剩余部分。总数base-5现在是'14',您只需依次编写模运算。

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

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


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

    BigInteger呢?他提到过什么吗?从文章中可以看出:您不能使用任何Java方法/类进行基本转换。您必须编写自己的代码。对不起,我错过了这一部分。为什么在
    readBaseValues()
    中提示输入并读取基本值?它已在
    readBase()
    中接收,并作为参数传递给
    readBaseValues()
    。如何修复它,使其功能相同?