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。
答案 0 :(得分:3)
b
是一种String
。 a
是char
的一种类型。您无法将char
等原语分配给String
。
可以做的是使用Character.toString(char value)
代替:
b = Character.toString(a);
我也注意到你的程序中存在一些缺陷......但是我会留下主要的逻辑问题来解决。
当您解决上述问题时,有可能未执行for
语句,因此可能无法初始化变量b
。您可以通过将b
初始化为null
来解决此问题。
你的逻辑很不寻常 - 你只关注String
中的最后一个角色,而我并不完全确定你想要的是什么。想想我会为你指出这一点。
答案 1 :(得分: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。请注意,我使所有方法都是非静态的。如果您没有相关经验,请编写主方法。不过,这应该是您唯一的static
方法。