从线程内运行新线程

时间:2014-02-06 11:28:44

标签: java multithreading tree runnable

我解决了一个难题。我将尝试简要描述它,然后提问。

将电话号码映射到文本。例如: 101 - > 101,但501 - > J01,K01,L01(AFAIK)。

我们获得了9位数,需要生成所有组合,甚至是那些语法不正确的组合。

我创建了一个基本上像树一样成长的程序。当找到一个不是0或1的数字时,我们创建一个新的分支,其中包含已翻译的文本+一个可能的字母+其余的数字。

我通过每次遇到新的可翻译数字时创建一个新线程来解决它。

你认为这是一种不好的做法吗?可以更好地解决吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

为每种可能性创建一个线程似乎有些过分,你真正想要的是递归。试试这个:

String [] lookup = { "0", "1", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ" };

List<String> results = new ArrayList<String>();

void translatePhone(String phoneNumber, int position) {
    int index = Integer.parseInt(phoneNumber.substring(position, position + 1));
    for (int i = 0; i < lookup[index].length; i++) {
        String xlated = phoneNumber.substring(0, position) + lookup[index].charAt(i) + phoneNumber.substring(position + 1);
        if (position + 1 == phoneNumber.length) {
            results.add(xlated);
        } else {
            translatePhone(xlated, position + 1);
        }
    }
}

致电translatePhone(phoneString, 0)将其启动。返回results后,应该包含所有结果。