0
public static String convertPNumber(String p) {
    String b;
    for (int i = 0; i < p.length(); i++) {
        char a = p.charAt(i);
        if (!Character.isDigit(a)) {
            if (a == 'A' || a == 'B' || a == 'C') {
                b = "2";
            }
        } else {
            b = a;
        }
    }
    return b;
}

public static void main(String args[]) {
    convertPNumber("AB2");
}

如果字符是数字,我希望它打印数字,但由于该方法是公共静态字符串,它说当 b = a 时需要字符串;它找到了char。

4

2 回答 2

3

b是 的一种Stringa是 的一种char。您不能将原语分配charString.

可以做的是使用Character.toString(char value)

b = Character.toString(a);

我还注意到您的程序中存在一些缺陷……但我将把主要的逻辑问题留给您解决。

当你去修复上面的问题时,有可能for语句没有执行,所以变量b可能没有被初始化。您可以通过初始化b来解决此问题null

你的逻辑很不寻常——你只注意你的最后一个字符String,我不完全确定这就是你想要的。想我会为你指出这一点。

于 2013-10-03T03:45:28.607 回答
0

您正在获取字符串中的每个字符,并将其转换为另一个字符。但是,你根本没有把这些角色放在一起。StringBuilder一种方法是使用类,但不一定是最有效的。该类被设计为可变的String

我不会写最里面的方法,但这里是一个开始。

public class ABTranslator {
    public String translate(String before) {
        StringBuilder b = new StringBuilder();
        for (int i = 0, length = before.length(); i < length; i++) {
            char a = before.charAt(i);
            b.append(convert(a));
        }
        return b.toString();
    }

    public char convert(char before) {
        // You write this.
    }
}

您可以使用正则表达式代替if上面的代码。

现在,编写一组 JUnit 测试来检查您的方法是否正确:

//In ABTranslatorTest.java

@Before
public void initTranslator() {
    this.translator = new ABTranslator();
}

@Test
public void digitsAreConvertedToThemselves() {
    Assert.assertEquals('3', translator.convert('3');
}

@Test
public void mostCharsAreConvertedToThemselves() {
    Assert.assertEquals('X', translator.convert('X');
}

@Test
public void ABCAreConvertedToTwo() {
    Assert.assertEquals('B', translator.convert('2');
}

@Test
public void WordsAreConvertedAsCharactersAre() {
    Assert.assertEquals("222", translator.translate("AB2");
}

使所有这些工作。从您的同事那里了解如何设置 JUnit 4.11。请注意,我将所有方法都设置为非静态的。如果您没有这方面的经验,请编写一个 main 方法。不过,这应该是你唯一的static方法。

于 2013-10-03T03:59:07.803 回答