[英]Add two strings containing binary numbers
我正在教自己如何使用Java進行編碼,並且使用在Internet上找到的練習來練習所學內容。
無論如何,我處於一個練習的中間,要求我構建一個方法,該方法從用戶那里獲得兩個僅包含字符“ 0”和“ 1”的字符串,並返回兩個(二進制)組合的字符串
例:
BinaryAdder("0","0") - > "0"
BinaryAdder("1","1") - > "10"
BinaryAdder("10100","111") - > "11011"
我所做的是:
import java.util.Scanner;
public class assigment03
{
private static String whichIsBigger(String a, String b)
{
if(a.length()>b.length())
return a;
if(a.length()<b.length())
return b;
if(a.length()==b.length())
return a;
else return null;
}
private static String binaryAdder(String a,String b)
{
int[] binaryResult= new int[maxlength(a,b)+1];
String result="";
if(whichIsBigger(a,b)==a)
{
for(int i=0;i<b.length();i++)
{
binaryResult[i]=a.charAt(i)+b.charAt(i);
}
for(int i=b.length();i<a.length();i++)
{
binaryResult[i]+=a.charAt(i);
}
}
else
{
for(int i=0;i<a.length();i++)
{
binaryResult[i]=b.charAt(i)+a.charAt(i);
}
for(int i=a.length();i<b.length();i++)
{
binaryResult[i]+=b.charAt(i);
}
}
for(int i=0;i<binaryResult.length-1;i++)
{
if(binaryResult[i]>=2)
{
binaryResult[i]=binaryResult[i]%2;
binaryResult[i+1]++;
}
}
for(int i=binaryResult.length-1;i>=0;i--)
{
result+=Integer.toString(binaryResult[i]);
}
return result;
}
private static int maxlength(String a, String b)
{
if(a.length()>b.length())
return a.length();
else
return b.length();
}
public static void main(String[] args)
{
Scanner temp= new Scanner(System.in);
System.out.print(binaryAdder(temp.next(),temp.next()));
}
}
但這不會返回正確的結果。 你介意在這里幫我嗎?
非常感謝!
閱讀您的問題,我了解到您可能正在尋求一些幫助,以實現實際添加兩個二進制數的方法,然后以基數2返回結果(在Java中,btw可能很復雜)。 但是,我認為此練習沒有一個非常重要的限制,例如允許讀取二進制數字的最大長度(在處理諸如int或String之類的原始數據類型的值時可能會發生溢出)。 同樣,在處理像這樣的情況下不重要的零時,此練習也需要一些計划,因為“ 00110b” =“ 0110b” =“ 0110b”,並且在處理產生2(“ 10b”)或3( “ 11b”)。 這些主題的更多信息,可以發現在這里 ,在第2章。
至少在Java中,解決這類練習時,一種選擇是避免處理此類限制和條件。 Java提供了一個稱為BigInteger的類,該類負責處理巨大的值,沒有明顯的零,並且帶走了程序員的負擔。 Java BigInteger還提供了一個構造函數,可以在任何基礎上初始化其對象。 (很好,對此也有一些限制,請參閱此鏈接以獲取更多信息)。
話雖如此,這是我對此練習的解決方案:
import java.util.Scanner;
import java.util.ArrayList;
import java.math.BigInteger;
public class BinaryAdder {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayList<String> numbers = new ArrayList<String>();
String number = "";
int count = 1;
System.out.print("Instructions:\nPlease enter a set of binary numbers. When you are ready to calculate their addition, enter \"done\",\n\n");
System.out.print("Number " + count + ": ");
while(!(number = scanner.next()).equals("done")){
numbers.add(number);
count++;
System.out.print("Number " + count + ": ");
}
System.out.print("Result = " + binaryAdder(numbers) + "b");
scanner.close();
}
public static String binaryAdder(ArrayList<String> numbers){
BigInteger accumulator = new BigInteger("0");
for(String number: numbers){
accumulator = accumulator.add(new BigInteger(number, 2));
}
return accumulator.toString(2);
}
}
例:
說明:請輸入一組二進制數。 准備好計算它們的加法時,輸入“完成”,
編號1:00001
2號:011
數字3:完成
結果= 100b
在第8-11行之間聲明了一些變量: 掃描程序讀取輸入的二進制數字,存儲輸入的二進制數字的數組列表 ,輸入一次保存數字的字符串以及用於跟蹤有多少個數字的int輸入,因為我擴展了此解決方案以添加0、1、2、3,...,n個數字)。
第13行打印此解決方案的說明。 第14行僅打印“數字1:”。
第16-20行之間的while循環將輸入的值設置為變量號,並檢查其是否等於“ done”。 在這種情況下,它會跳出循環,否則,會將數字添加到數組list中 。
第22行顯示所有輸入的二進制數字相加的結果。
但是“魔術”確實發生在方法“ binaryAdder”的第27-35行之間(請注意,“ binaryAdder”接收到包含所有作為參數輸入的數字的ArrayList)。 在第28行,將BigInteger類型的累加器初始化為零,以保存ArrayList中所有數字的加法。 然后,for循環遍歷數組列表中的所有數字,以將其添加到累加器中。 最后,累加值以二為底返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.