2014-09-02 37 views
1

我需要一些我應該創建的程序的幫助。我應該創建一個程序,讀取用戶輸入的任意長度的兩個字符串,並將它們相減或相加。我不允許在操作前將這些字符串轉換爲數字。這是我迄今爲止所得到的。我的老師提到了將字符串轉換爲uni-code來加減它們,但我不知道該怎麼做,因爲我們甚至沒有學過uni-code。這裏是我的代碼:加入和減去Java中的字符串

import java.util.Scanner; 
public class Number { 
    private char Sign; 
    private String Whole; 
    private String Fraction; 

    public static void main(String[] args) { 
     Scanner Keyboard = new Scanner (System.in); 
     System.out.println("This program adds or subtracts numbers of any lengths, please add two numbers: "); 
     String num1 = Keyboard.nextLine(); 
     System.out.println("Enter the second number: "); 
     String num2 = Keyboard.nextLine(); 

     String sum = " "; 
     int length = num1.length(); 
     int carry = 0; 

     public Number Add(Number RHS) { 

      for (int i = length -1 ; i >= 0; i--) { 
       char c1 = num1.charAt(i); 
       char c2 = num2.charAt(i); 

       int tempSum = (c1 - 48) + (c2 - 48) + carry; 
       carry = tempSum/10; 

       int sumDigit = tempSum % 10; 
       sum = (char) (sumDigit + 48) + sum; 

       if (carry == 1) { 
        sum = "1" + sum; 
       } 
      } 
     } 
    } 
    public Number (double n) { 
     Whole = " "; 
     Fraction = " "; 
     if (n >= 0) { 
      Sign = '+'; 
     } 
     else 
     { 
      Sign = '-'; 
      n = Math.abs(n); 
      String numString = new Double(n).toString(); 
      int position = numString.indexOf("."); 
     } 

    } 
} 
+0

您可能希望使它們具有相同的長度,以左墊零。 – 2014-09-02 14:34:46

+1

我真的不明白這個問題,但是我覺得需要指出的是,按照慣例'變量'是用camelCase編寫的,除非它們是'static final'常量,否則絕不以大寫字母開頭 – Juxhin 2014-09-02 14:40:53

+0

忘記Unicode。 Java字符串是一系列字符。 Java通過Unicode _code points_表示字符,但您不需要知道完成分配。所有你需要知道的是'0' - '0'== 0',''1' - '0'== 1',等等。 – 2014-09-02 14:41:07

回答

2
public static String add(String as, String bs){ 
    ArrayList<String> BigNum = new ArrayList<>(); 
    int m = as.length()-1; 
    int n = bs.length()-1; 
    int min = m > n ? n : m ; 
    int max = 0; 
    String s; 
    if(n > m){ 
     s = bs; 
     max = n; 
    }else{s = as ; max = m;} 

    Integer carry = 0; 
    while(true){ 
     int a = Integer.parseInt(Character.toString(as.charAt(m))); 
     int b = Integer.parseInt(Character.toString(bs.charAt(n))); 
     Integer c = a + b + carry; 
     if(c > 9){ 
      carry = 1; 
      c %=10; 
     }else carry = 0; 

     BigNum.add(c.toString()); 
     n--; m--; min--; max--; 

     if (min < 0 ) { 
      if(carry !=0 && max < 0) 
       BigNum.add(carry.toString()); 
      break; 
     } 
    } 
    Integer c = carry; 
    while(max >= 0) { 
     c += Integer.parseInt(Character.toString(s.charAt(max))); 
     BigNum.add(c.toString()); 
     c = 0; 
     max--; 
    } 
    String s2 = ""; 
    for (int i = BigNum.size()-1; i >= 0; i--) { 
     s2 +=BigNum.get(i); 
    } 
    return s2; 
}