我有一个程序,提示用户输入字符串,初始基数和最终基数。该程序适用于所有数字但是,当我输入一个混有数字和字符的字符串时,它不会返回正确的答案。例如,当我输入字符串BDRS7OPK48DAC9TDT4,原始基数:30,newBase:36时,它应该返回ILOVEADVANCEDJAVA,但我得到ILOVEADVANHSC6LTS。我知道这是我的算法的一个问题,但我无法弄清楚为什么它会返回错误的转换。
duplicate file "Google Drive:Team Drives:Company -Sync Folder:0000-1_E.xlsx" of startup disk to folder (jobNum & " Documents") of newJobFolder
答案 0 :(得分:1)
算法是正确的。仔细查看将输入值转换为十进制系统的位置,尤其是您正在使用的数据类型的限制。
可能有用的资源:
double
点列表希望这能指引您走上正轨。
答案 1 :(得分:0)
import java.math.BigInteger;
import java.util.Scanner;
public class BaseConversion {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String theValue;
String result;
String newNum;
int initialBase;
int finalBase;
String[] parts = args;
if (parts.length > 0) {
theValue = parts[0];
isValidInteger(theValue);
initialBase = Integer.parseInt(parts[1]);
finalBase= Integer.parseInt(parts[2]);
isValidBase(finalBase);
}
else {
System.out.println("Please enter a value: ");
theValue = s.nextLine();
isValidInteger(theValue);
System.out.println("Please enter original base: ");
initialBase = s.nextInt();
System.out.println("Please enter new base: ");
finalBase = s.nextInt();
isValidBase(finalBase);
}
// check it
// isValidInteger(theValue, finalBase);
s.close();
newNum = convertInteger(theValue, initialBase, finalBase);
System.out.println("new number: " + newNum);
}
public static void isValidBase(int finalBase) {
if (finalBase < 2 || finalBase > 36) {
System.out.println("Error: Base must be greater than or equal to 2 & less than or equal to 36");
System.exit(1);
}
}
public static void isValidInteger(String num) {
char chDigit;
num = num.toUpperCase();
for(int d = 0; d < num.length(); d++) {
chDigit = num.charAt(d);
if (!Character.isLetter(chDigit) && !Character.isDigit(chDigit)) {
//System.out.println(chDigit);
System.out.println("Error character is not a letter or number");
System.exit(1);
}
}
}
public static String convertInteger(String theValue, int initialBase, int finalBase) {
BigInteger bigInteger = new BigInteger(theValue,initialBase);
String value = bigInteger.toString(finalBase);
value = value.toUpperCase();
return value;
}
}
这是正确的解决方案。问题在于数据类型而不是算法。我希望这有助于处理同类问题的任何人。