2013-11-26 104 views
1

该程序将从telephones.txt文件中读取每个电话号码,并检查它是否可以翻译成一个或多个words.txt文件。该程序的输出将包含电话号码和他们的单词代表。 (假设有字和电话在文件中)字符串不相等

while(phones.hasNext()) 
{ 
    number = phones.next(); 
    number = number.replace("-",""); 
    //Scans for next word string 
    System.out.print(number + " "); 
    Scanner words = new Scanner(new File("words.txt"));  
    while(words.hasNext()) 
    { 
     code = words.next(); 
     char[] wordChars = null; 
     wordChars = code.toCharArray(); 
     output = ""; 

     for(char wordChar : wordChars) 
     { 
      output = output.concat(new String(convert(wordChar))); 
     } 

     if(number.equals(output)) 
     { 
      end += code; 
      System.out.print(code); 
      if(end.isEmpty() && end !=null) 
      { 
       System.out.print("NONE"); 
      } 
     } 
    } 
    System.out.println(); 

} 
} 

假设该文件中的字被CBCNEWS,CTVNEWS和数字是2251493和2226397 如果(number.equals(输出)); System.out.println(number +“”+ code); } 此代码仅在字符串编号等于字符串输入时才打印,而始终打印。什么条件我不得不作出这样,当满足条件时,将只打印,也将继续寻找更多的话

我如何转换的串码是用这样的:

public static char[] convert(char c) 
{ 
    switch(c) 
    { 
     case 'A' : 
     case 'B' : 
     case 'C' : 
      return new char[]{'2'}; 
     case 'D' : 
     case 'E' : 
     case 'F' : 
      return new char[]{'3'}; 
     case 'G' : 
     case 'H' : 
     case 'I' : 
      return new char[]{'4'}; 
     case 'J' : 
     case 'K' : 
     case 'L' : 
      return new char[]{'5'}; 
     case 'M' : 
     case 'N' : 
     case 'O' : 
      return new char[]{'6'}; 
     case 'P' : 
     case 'R' : 
     case 'S' : 
      return new char[]{'7'}; 
     case 'T' : 
     case 'U' : 
     case 'V' : 
      return new char[]{'8'}; 
     default: 
      return new char[]{'9'}; 
    } 
} 
+1

与问题无关,但我会建议用'HashMap'替换'convert'方法。 – Smallhacker

回答

3

半你的if后的结果。

 if(number.equals(output)); 
     { 
      System.out.println(number + " " + code); 
     } 

应该是:

 if(number.equals(output)) 
     { 
      System.out.println(number + " " + code); 
     } 
+0

哇...你知道我会如何继续循环继续寻找更多的单词吗?但是,谢谢 – Shimy

+0

好吧,它会遍历phones.txt输入文件,并再次加载words.txt。我没有看到循环的问题,但如果文件不是太大,我会考虑先将它们加载到ArrayList中,然后循环它们。你到底什么意思? – Kieveli

+0

例如,我找到一个成功的比赛后,我打印出来,然后我想寻找另一场比赛,并打印出这样的数字如此 数+匹配代码(如果theres另一匹配)+另一匹配等? – Shimy

0

只是一个建议:可以考虑通过一个简单的ASCII功能或HashMap的实现来改变你的冗长的转换方法实现,例如:

public static char[] convert(char c){ 
    int check = (c - 'A'); 
    if(check<3){ return new char[]{'2'};} 
    else if(check>2 && check<6){ return new char[]{'3'};} 
    else if(check>5 && check<9){ return new char[]{'4'};} 
    else if(check>8 && check<12){ return new char[]{'5'};} 
    else if(check>11 && check<15){ return new char[]{'6'};} 
    else if(check>14 && check<19){ return new char[]{'7'};} 
    else if(check>18 && check<22){ return new char[]{'8'};} 
    else{ return new char[]{'9'};} 
} 

char'7'是否错过了'Q'?

+0

我想我记得Q和Z没有在电话上 - 也许这是区域相关的? 不是 - 它随着时间而改变: http://en.wikipedia.org/wiki/Telephone_keypad#Layout_and_Characters – Kieveli

+0

为什么不只是检查你的手机?它确实出现在我的Windows Phone 7.8中:) –

+0

在这种情况下,单个参考点不足以确定正确性;) – Kieveli