2013-10-03 177 views
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时需要字符串;并发现字符。我怎样才能打印字符值?

+0

呃...你的编辑使我们的答案无效。如果您还有其他问题要问,请在另一个问题中提出。否则,此编辑可能会恢复。 – Makoto

+0

继续并恢复,对不起 – user2770254

回答

3

bString的一种类型。 a是一种char。您不能将诸如char之类的原语分配给String

什么你可以做的是使用Character.toString(char value)代替:

b = Character.toString(a); 

我也注意到,你得在你的程序中的一些不足之处......但我会离开的主要逻辑问题为你解决。

当您着手解决上述问题时,有可能for语句未执行,因此变量b可能未被初始化。您可以通过初始化bnull来解决此问题。

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

+0

我正在介绍Java类,所以我的逻辑有点笨拙和非常规,并且说实话可能是错误的。这是一个未完成的代码,我现在完成了,并且正在编辑它以包含我的完成代码。谢谢。 – user2770254

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