基本上,我正在尝试编写一个程序,将一个数字从基数2转换为基数10.我尝试做的是将本网站上列出的“加倍方法”下的过程转换为for循环,但对于某些因为我得到的数字是大的。
基本公式是(2 * previousTotal)+(保存用户输入的二进制数的ArrayList的currentDigit)= previousTotal。
因此,对于二进制的1011001,数学将是:
然而,控制台打印出6185作为结果。我想它可能与我使用字符的ArrayList有关,但是charWhole.size()返回7,这是用户的二进制数中有多少位数。我一做charsWhole.get(w);然而,我开始得到像49这样的大数字。我真的很感激一些帮助!
我写了这个循环,并根据我在整个代码中放置的一些打印语句和我的变量addThis似乎是问题所在。控制台打印出最终总数为6185,而基数10中的1011001实际为89。
public static void backto2(){
System.out.println("What base are you coming from?");
Scanner backToB10 = new Scanner(System.in);
int bringMeBack = backToB10.nextInt();
//whole
System.out.println("Please enter the whole number part of your number.");
Scanner eachDigit = new Scanner(System.in);
String theirNumber = eachDigit.nextLine();
String str = theirNumber;
ArrayList<Character> charsWhole = new ArrayList<Character>();
for (char testt : str.toCharArray()) {
charsWhole.add(testt);
}
System.out.println(theirNumber); // User's number
System.out.println(charsWhole); // User's number separated into elements of an ArrayList
System.out.println(charsWhole.size()); // Gets size of arrayList, comes out as 7 which seems fine.
int previousTotal = 0, addThis = 0, q =0;
for( int w = 0; w < charsWhole.size(); w ++) {
addThis = charsWhole.get(w); //current digit of arraylist PROBLEM
q = previousTotal *2;
previousTotal = q + addThis; // previous total gets updated
System.out.println(q);
System.out.println(addThis);
System.out.println(q + " and " + addThis + "equals " + previousTotal);
}
System.out.println(previousTotal);
答案 0 :(得分:6)
您正在尝试将字符添加到整数。隐式转换使用字符的ASCII值,因此'1'转换为49而不是1,因为49是字符'1'的代码。减去'0'以获得实际的整数值。
addThis = charsWhole.get(w) - '0';
这是有效的,因为数字0-9用ASCII表示为代码48-57,所以实际上你将为'1'减去49 - 48得到1。
当角色超出允许的字符范围时,你仍然需要处理案件。
修改强>
Java使用Unicode,但出于数字0-9的代码的目的,ASCII和Unicode中的代码相同(48到57或0x30到0x39)。
答案 1 :(得分:1)
问题是你使用的是字符而不是它们代表的数字值。在行
addThis = charsWhole.get(w);
addThis
的值是字符的ascii值。对于'0',这是48.改为使用:
addThis = Integer.parseInt(charsWhole.get(w));
答案 2 :(得分:0)