【问题标题】:I am trying to assign a number to each character我正在尝试为每个字符分配一个数字
【发布时间】:2016-07-28 13:32:19
【问题描述】:
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

【问题讨论】:

  • a) 代码很多,尝试创建一个MVCE b) 如果您希望人们花时间帮助您,您至少可以将其格式化,以便易于理解。
  • 请更具描述性。什么是“对每个价值”,哪个价值?为每个非数字字符分配“1-10”是什么意思?请将您的代码精简到相关的部分,然后我们可以为您提供更多帮助。帮助我们帮助您。
  • @JamesWierzba 我想要你如何看到附加的图片。抱歉描述不佳。
  • 是我一个人,还是在声明后的行中读带括号的代码很痛苦?
  • @dambros 我的感觉正好相反,我觉得这样看起来是对称的。

标签: java recursion data-structures


【解决方案1】:

首先,如果您正确格式化代码,您可能会发现调试更容易。我记得你昨晚发帖时遇到了类似的语法问题。如果您将其格式化,您可能会发现您的代码更易于阅读:

//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 可以自动定位您遇到的许多小错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-08
    • 2015-03-25
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    相关资源
    最近更新 更多