2016-04-07 9 views
-1
import java.util.Scanner; 
public class Recursion 
{ 
    //variables to hold string values 
    public static String s1 = new String(new char[10]); 
    public static String s2 = new String(new char[10]); 
    public static String s3 = new String(new char[11]); 
    public static String charSet = new String(new char[11]); 
    //variables to hold number values 
    public static int numberOne; 
    public static int numberTwo; 
    public static int numberThree; 
    public static int maxCharCount; 
    public static int[] numberSet = new int[10]; 
    //function which generates a number 
    public static void checkForEquality() 
    { 
     numberOne = numberTwo = numberThree = 0; 
     int i; 
     int j; 
     for (i = 0; i < s1.length(); i++) 
     { 
      for (j = 0; j < maxCharCount; j++) 
      { 
       if (s1.charAt(i) == charSet.charAt(j)) 
       { 
        if (i == 0 && numberSet[j] == 0) 
        return; 
        //generate the number 
        numberOne = (numberOne * 10) + numberSet[j]; 
       } 
      } 
     } 
     for (i = 0; i < s2.length(); i++) 
     { 
      for (j = 0; j < maxCharCount; j++) 
      { 
       if (s2.charAt(i) == charSet.charAt(j)) 
       { 
        if (i == 0 && numberSet[j] == 0) 
        return; 
        //generate number 
        numberTwo = (numberTwo * 10) + numberSet[j]; 
       } 
      } 
     } 
     for (i = 0; i < s3.length(); i++) 
     { 
      for (j = 0; j < maxCharCount; j++) 
      { 
       if (s3.charAt(i) == charSet.charAt(j)) 
       { 
        if (i == 0 && numberSet[j] == 0) 
        return; 
        //generate the number 
        numberThree = (numberThree * 10) + numberSet[j]; 
       } 
      } 
     } 
    } 
    public static void display(){ 
     if (numberOne + numberTwo == numberThree) { 
      //display the output 
      int i=0; 
      System.out.println(); 
      System.out.print(" Summation Puzzle solved. "); 
      System.out.print("n"); 
      System.out.print(s1); 
      System.out.print("<==>"); 
      System.out.print(numberOne); 
      System.out.print("n"); 
      System.out.print(s2); 
      System.out.print("<==>"); 
      System.out.print(numberTwo); 
      System.out.print("n"); 
      System.out.print(s3); 
      System.out.print("<==>"); 
      System.out.print(numberThree); 
      System.out.print("n"); 
      //loop to show the result 
      for (i = 0; i < maxCharCount; i++) 
      { 
       System.out.println(charSet.charAt(i)); 
       System.out.print("<==>"); 
       System.out.print(numberSet[i]); 
       System.out.print("n"); 
      } 
      System.exit(0); 
     } 
    } 
    //recursive function which will call itself 
    public static void Combinations(int indexCounter, int[] availableSet) 
    { 
     int i; 
     if (indexCounter != 0) 
     { 
      for (i = 0; i < 10; i++) 
      { 
       numberSet[indexCounter] = i; 
       if (availableSet[i] == 1) 
       { 
        availableSet[i] = 0; 
        Combinations(indexCounter + 1, availableSet); 
        availableSet[i] = 1; 
       } 
      } 
     } 
     if (indexCounter == maxCharCount) 
     checkForEquality(); 
    } 
    public static void createCharSet() 
    { 
     int i; 
     int setIndex; 
     int present; 
     int j; 
     setIndex = 0; 
     for (i = 0; i < s1.length(); i++) 
     { 
      present = 0; 
      for (j = 0; j < setIndex; j++) 
      { 
       if (s1.charAt(i) == charSet.charAt(j)) 
       { 
        present = 1; 
       } 
      } 
      if (present == 0) 
      { 
       charSet = StringFunctions.changeCharacter(charSet, setIndex++, s1.charAt(i)); 
      } 
     } 
     for (i = 0; i < s2.length(); i++) 
     { 
      present = 0; 
      for (j = 0; j < setIndex; j++) 
      { 
       if (s2.charAt(i) == charSet.charAt(j)) 
       { 
        present = 1; 
       } 
      } 
      if (present == 0) 
      { 
       charSet = StringFunctions.changeCharacter(charSet, setIndex++, s2.charAt(i)); 
      } 
     } 
     for (i = 0; i < s3.length(); i++) 
     { 
      present = 0; 
      for (j = 0; j < setIndex; j++) 
      { 
       if (s3.charAt(i) == charSet.charAt(j)) 
       { 
        present = 1; 
       } 
      } 
      if (present == 0) 
      { 
       charSet = StringFunctions.changeCharacter(charSet, setIndex++, s3.charAt(i)); 
      } 
     } 
     maxCharCount = setIndex; 
    } 
    public static void calculateSummation() 
    { 
     int loop; 
     if (maxCharCount > 10) 
     { 
      System.out.print("Please check the input again"); 
      return; 
     } 
     else 
     { 
      int[] avaliableSet = new int[10]; 
      for (loop = 0; loop < 10; loop++) 
      { 
       avaliableSet[loop] = 1; 
      } 
      Combinations(0, avaliableSet); 
     } 
    } 
    //main method 
    public static void main(String[]args) { 
     Scanner scan = new Scanner(System.in); 
     System.out.print("Enter the first String :"); 
     s1 = scan.next(); 
     System.out.print("Enter the second String :"); 
     s2 = scan.next(); 
     System.out.print("Enter the thirsd String :"); 
     s3 = scan.next(); 
     createCharSet(); 
     System.out.print(" result of your 3 three strings = "); 
     System.out.print(charSet); 
     calculateSummation(); 
     checkForEquality(); 
     display(); 
    } 
} 

プログラムを実行するたびに、各値に0が割り当てられます。私は1から10までの値を各非数字文字に割り当てることができるようにしたい。 誰かが私を助けることができますか?それはこの Sample output各文字に数字を割り当てようとしています

+3

a)コードが多いので、[MVCE](http://stackoverflow.com/help/mcve)を作成してみてください。b)人々があなたに手伝ってもらいたい場合は、できる限り少なくしてください。フォーマットすると簡単にフォローできます。 –

+0

もっと説明してください。 「各価値に」とは何か、その価値は何ですか?各非数字文字に「1-10」を割り当ててください。どういう意味ですか?関連する部分にコードをトリムしてください、そして、私たちはもっとあなたを助けることができます。私たちのお手伝いをしてください。 –

+0

@JamesWierzba写真がどのように添付されているかを見たいと思っていました。貧弱な記述には申し訳ありません。 –

答えて

0

まずオフのようなものになるはずです

、あなたが適切にあなたのコードをフォーマットした場合、デバッグが容易かもしれません。私は昨夜あなたがシンタックスに起因する同様の問題を経験した場所に投稿したことを覚えています。あなたはこのようにそれをフォーマットする場合は、あなたのコードが読みやすいことがあります:

//function which generates a number 
public static void checkForEquality(){ 
    numberOne = numberTwo = numberThree = 0; 
    int i; 
    int j; 
    for (i = 0; i < s1.length(); i++){ 
     for (j = 0; j < maxCharCount; j++){ 
      if (s1.charAt(i) == charSet.charAt(j)){ 
       if (i == 0 && numberSet[j] == 0) 
        return; 

       //generate the number 
       numberOne = (numberOne * 10) + numberSet[j]; 
      } 
     } 
    } 

    for (i = 0; i < s2.length(); i++){ 
     for (j = 0; j < maxCharCount; j++){ 
      if (s2.charAt(i) == charSet.charAt(j)){ 
       if (i == 0 && numberSet[j] == 0) 
        return; 

       //generate number 
       numberTwo = (numberTwo * 10) + numberSet[j]; 
      } 
     } 
    } 

あなたのコードのちょうどこの部分を見て、それはまだ正しくアルゴリズムを以下のかどうかを確認します。適切にフォーマットされたコードで自分自身を見つけた可能性のあるエラーが見つかります。あなたのprevious question(私が答えた)を見てみると、より良いコードを書くのに役立つリンクが見つかります。

また、私は自分のIDEでこれをコンパイルしようとしませんでしたが、Eclipseを見てください。取得している小さなエラーの多くは、Eclipseによって自動的に検出される可能性があります。

関連する問題