| 尝试做了第二题,上午做了一个多小时,现在功能已经实现,主要原理是采用递归实现的。 详细代码如下:
 import java.util.ArrayList;
 import java.util.List;
 
 
 public class Test2 {
 private static String message="";
 static List<String> list=new ArrayList<String>();//这里我只是把功能实现了,至于其它的,接收字符串,还有验证是否是正确的数字及长度
 private static int counts=0;                                        //只有留给调用此方法的人去做了
 public static void main(String[] args){
 String s="327523";
 System.out.println("总共有:"+method(s)+"条信息");          //调用方法并返回行数
 }
 public static int method(String str){
 if(str.length()>0){                                //用于判断递归后的字符串长度,不能为0
 char[] a0={'0'};                        //以下为对应的各个数字中的字母 其中0和1只认为有0这个字符
 char[] a1={'0'};
 char[] a2={'a','b','c'};
 char[] a3={'d','e','f'};
 char[] a4={'g','h','i'};
 char[] a5={'j','k','l'};
 char[] a6={'m','n','o'};
 char[] a7={'p','q','r','s'};
 char[] a8={'t','u','v'};
 char[] a9={'w','x','y','z'};
 if(str.charAt(0)==48){                        //str.charAt(0)方法判断首字母是0~9之中的哪一个,因为根据ascii表,0是49,9是57
 for(int i=0;i<a0.length;i++){                //根据如果是0 则为数组a0,根据数组长度判断循环次数
 message+=a0[i];                                        //将0对应的字符添加到字符串message末尾
 list.add(message);                                //全部添加到list集合中,最后再来排除不够长度的
 method(new String(str).substring(1,str.length()));        //递归,此题的主要原理就用的这个
 message=message.substring(0,message.length()-1 );        //递归后,message要减去新添加的那个字符
 }
 }
 else if(str.charAt(0)==49){                        //其它的以此判断是否是1,2,3,4,5,6,7,8,9..后面注释省略
 for(int i=0;i<a1.length;i++){        //虽然这样有些繁琐,但是鄙人才疏学浅,暂时没有想到其它方法 switch应该也行
 message+=a1[i];
 list.add(message);
 method(new String(str).substring(1,str.length()));
 message=message.substring(0,message.length()-1 );
 }
 }
 else if(str.charAt(0)==50){
 for(int i=0;i<a2.length;i++){
 message+=a2[i];
 list.add(message);
 method(new String(str).substring(1,str.length()));
 message=message.substring(0,message.length()-1 );
 }
 }
 else if(str.charAt(0)==51){
 for(int i=0;i<a3.length;i++){
 message+=a3[i];
 list.add(message);
 method(new String(str).substring(1,str.length()));
 message=message.substring(0,message.length()-1 );
 }
 }
 else if(str.charAt(0)==52){
 for(int i=0;i<a4.length;i++){
 message+=a4[i];
 list.add(message);
 method(new String(str).substring(1,str.length()));
 message=message.substring(0,message.length()-1 );
 }
 }
 else if(str.charAt(0)==53){
 for(int i=0;i<a5.length;i++){
 message+=a5[i];
 list.add(message);
 method(new String(str).substring(1,str.length()));
 message=message.substring(0,message.length()-1 );
 }
 }
 else if(str.charAt(0)==54){
 for(int i=0;i<a6.length;i++){
 message+=a6[i];
 list.add(message);
 method(new String(str).substring(1,str.length()));
 message=message.substring(0,message.length()-1 );
 }
 }
 else if(str.charAt(0)==55){
 for(int i=0;i<a7.length;i++){
 message+=a7[i];
 list.add(message);
 method(new String(str).substring(1,str.length()));
 message=message.substring(0,message.length()-1 );
 }
 }
 else if(str.charAt(0)==56){
 for(int i=0;i<a8.length;i++){
 message+=a8[i];
 list.add(message);
 method(new String(str).substring(1,str.length()));
 message=message.substring(0,message.length()-1 );
 }
 }
 else if(str.charAt(0)==57){
 for(int i=0;i<a9.length;i++){
 message+=a9[i];
 list.add(message);
 method(new String(str).substring(1,str.length()));
 message=message.substring(0,message.length()-1 );
 }
 }
 String[] strings=list.toArray(new String[list.size()]);                //把list赋值给String【】
 int count=strings[0].length();                //count用来判断list中的最大长度
 for(int i=0;i<strings.length;i++){
 if(strings[i].length()>count)
 count=strings[i].length();
 }
 for(int i=0;i<strings.length;i++){                //必须等于最大长度且等于字符串长度的才是合格的字符串
 if(strings[i].length()==count&&count==str.length()){
 System.out.println(strings[i]);
 counts=counts+1;   //类中的静态变量,用来统计合格字符的个数,以便返回
 }
 }
 }
 return counts;                          //返回信息条数
 }
 }
 
 PS:上面做的可能不尽完善,如有不足还欢迎各位指出
 |