2016-04-07 2 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(); 
    } 
} 

Jedes Mal, wenn ich das Programm ausführen, weist es jedem Wert 0 zu. Ich möchte jedem nicht numerischen Zeichen einen Wert von 1-10 zuweisen können. kann mir jemand helfen?Ich versuche, jedem Zeichen eine Zahl zuzuweisen

sollte es so etwas wie dieses Sample output

+3

a) Das ist eine Menge Code, versuchen Sie eine [MVCE] (http://StackOverflow.com/Help/Mcve) zu erstellen b) Wenn Sie möchten, dass die Leute sich die Zeit nehmen, Ihnen zu helfen, dann sollten Sie es am wenigsten tun formatiere es so, dass es einfach zu folgen ist. –

+0

Bitte beschreibender sein. Was ist "zu jedem Wert", welcher Wert? Weisen Sie jedem nicht numerischen Zeichen "1-10" zu. Was meinst du? Bitte reduzieren Sie Ihren Code auf den relevanten Teil und wir können Ihnen dann weiterhelfen. Hilf uns, dir zu helfen. –

+0

@JamesWierzba Ich wollte es wie du das Bild angehängt siehst. Entschuldigung für die schlechte Beschreibung. –

Antwort

0

Zunächst einmal, schauen Sie einfacher Debuggen finden können, wenn Sie Ihren Code richtig formatiert werden. Ich erinnere mich, dass du letzte Nacht gepostet hast, wo du ähnliche Probleme durch die Syntax erfahren hast. Sie können feststellen, dass Ihr Code leichter zu lesen ist, wenn Sie es wie folgt formatiert:

//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]; 
      } 
     } 
    } 

Werfen Sie einen Blick auf nur diesen Teil des Codes und sehen, ob es noch richtig Ihr Algorithmus folgt. Möglicherweise finden Sie einen Fehler, den Sie mit korrekt formatiertem Code gefunden haben könnten. Wenn Sie sich einen previous question von Ihnen anschauen (den ich beantwortet habe), finden Sie einen hilfreichen Link, der Sie zum Schreiben von besserem Code führt.

Auch habe ich nicht versucht, dies in meiner eigenen IDE zu kompilieren, aber Sie sollten sich Eclipse ansehen. Viele der kleinen Fehler, die Sie bekommen, könnten von Eclipse automatisch gefunden werden.