我正在自学Java编程,我试图做一些数字转换,从基数10到任何基,但我一直得到一个负值与下面的代码
import java.lang.Math;
import java.util.Scanner;
public class NumberSystemConversion {
public static void main(String [] args) {
System.out.println("Enter the source base of the integer");
Scanner sc = new Scanner(System.in);
int sBase = sc.nextInt();
System.out.println("Enter the destination base of the integer");
int dBase = sc.nextInt();
System.out.println("Enter the integer");
String s1 = sc.next();
//int len = s1.length();
int decNumber = 0;
for (int i =0; i <= s1.length()-1; i++) {
decNumber += s1.indexOf(i)*Math.pow(sBase,i);
}
System.out.println(decNumber);
}
}发布于 2022-10-25 04:46:15
您正在使用indexOf方法获取字符的索引。如果字符串中不存在它,则indexOf将返回一个-1。这就是你得到负值的方法。
以345作为输入。您正在将(i)从0迭代到2 (s.length() - 1为2)。
提示:您可以使用以下:
for (int i = 0; i < s.length(); i++) 不需要从长度中扣除1并检查它是否小于或等于。
然后检查s1.indexOf(i)。在第一次迭代中,将检查s1.indexOf(0),因为字符串中没有0,所以它将返回-1。
发布于 2022-10-25 08:23:46
您正在使用indexOf()方法获取字符的索引。但在你的背景下是完全不合适的。若要迭代字符串的字符,请使用charAt()或更好的codePointAt(),如下所示:
for (int i = 0; i < s.length(); i++) {
System.out.println( s.codePointAt(i) );
}一旦到了那里,您就必须将字符的unicode代码点转换为您想要计算的数字。此表可能会有所帮助:https://www.unicode.org/charts/PDF/U0000.pdf
https://stackoverflow.com/questions/74189147
复制相似问题