在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,我们需要:
每次你传播上一部的剩余部分。总数base-5现在是'14',您只需依次编写模运算。您必须将
convert()
实现为您自己版本的parseInt()
和String.valueOf()
。方法参数给出输入和输出的基础、表示这些数字的符号,并将符号的值以其索引的形式放置在数字数组中
您需要逐个字符处理输入字符,查找每个字符的位置值,并使用基数和数字的位置值建立数值。然后,您需要执行相反的操作,将生成的数字转换为以输出基数和符号表示的数字字符串
由于数字符号是作为输入给出的,因此您不应假定它们的
char
值与相应的位值之间存在任何特定关系(例如,程序似乎不受限制,使“0”成为具有位值0的数字)。BigInteger呢?他提到过什么吗?从文章中可以看出:您不能使用任何Java方法/类进行基本转换。您必须编写自己的代码。对不起,我错过了这一部分。为什么在readBaseValues()
中提示输入并读取基本值?它已在readBase()
中接收,并作为参数传递给readBaseValues()
。如何修复它,使其功能相同?