前天面试一道程序题,要求:写一方法用递归,判断一字符串顺序读和倒序读是否一样!我是这样写的!
可是为什么已经进入return true了,程序为什么还是会继续递归下去呢!
public class Test {
public static void main(String[] args) {
String s="abccba";
System.out.println(isSame(s));
}
public static boolean isSame(String s){
char c1=s.charAt(0);
char c2=s.charAt(s.length()-1);
System.out.println(c1+";"+c2);
String strTemp=s.substring(1, s.length()-1);
if(c1==c2&&strTemp.length()!=0){
isSame(strTemp);
} else if (c1==c2&&strTemp.length()==0){
return true;
}
return false;
}
}
可是为什么已经进入return true了,程序为什么还是会继续递归下去呢!
public class Test {
public static void main(String[] args) {
String s="abccba";
System.out.println(isSame(s));
}
public static boolean isSame(String s){
char c1=s.charAt(0);
char c2=s.charAt(s.length()-1);
System.out.println(c1+";"+c2);
String strTemp=s.substring(1, s.length()-1);
if(c1==c2&&strTemp.length()!=0){
isSame(strTemp);
} else if (c1==c2&&strTemp.length()==0){
return true;
}
return false;
}
}
解决方案 »
- java类HashMap<K,V>
- 编译一个 class 文件出现如下错误
- 大哥们帮帮怎么文本框不显示
- 高手请进 解决Java实现鼠标拖放文件功能!
- 想用java做个int[]的冒泡排序,但实现不了,请大家指教
- 问一个调用com组件的问题
- noclassdeffounderror!!
- 关于java.util.Calendar的使用问题,急!!!!!
- 如何做一个IP地址的输入格式,比如10.10.10.10,中间自己有3个点
- 使用exe4j打包jar为exe,运行闪退,无法看到错误信息
- 急:sun.net.ftp.FtpClient中文转码的问题..谢谢!
- 使用cobertura插件生成测试覆盖报告的问题。
多层执行的过程是,直到最内层不再嵌套,有一个确切的返回值,把这个值返回给上一层,上一层再通过这个值计算过继续向上一层返回,直到最外层,这时再进入return true;或return false;整个方法才算执行完毕,也是为什么会叫递归的原因。也是为什么并不是进入return true就是递归的结束的原因!
1.String s="abccba"; 如果String s="abcba",也应该是符合要求的,但是用你的PG判断不了。
2. if(c1==c2&&strTemp.length()!=0){
isSame(strTemp);
}
这里你将isSame(strTemp)的返回值忽略了。完全不影响结果。
改成下面这样: public static void main(String[] args) throws Exception{
String s="abcba";
System.out.println(isSame(s));
}
public static boolean isSame(String s) {
if(s.length() == 1) return true;
char c1 = s.charAt(0);
char c2 = s.charAt(s.length() - 1);
String strTemp = s.substring(1, s.length() - 1);
if (c1 == c2) {
if (strTemp.length() != 0) {
return isSame(strTemp);
} else {
return true;
}
} else {
return false;
}
}
public static void main(String[] args) {
String s="abccba";
System.out.println(isSame(s));
}
public static boolean isSame(String s)
{
if(s.length()<2)
{
return true;
}
char c1=s.charAt(0);
char c2=s.charAt(s.length()-1); if(!c1.equels(c2))
{
return false;
}else
{
return isSame(s.substring(1, s.length()-1));
}
}
}
public static void main(String args[]) throws Exception{
System.out.println(isSame("abccba",0));
System.out.println(isSame("abcba",0));
System.out.println(isSame("abcbba",0));
}
public static boolean isSame(String str,int len){
if(str.charAt(len)!=str.charAt(str.length()-1-len)){
return false;
}
if(len>=str.length()/2){
return true;
}
return isSame(str,len+1);
}
}
这样来好一点吧.
public static void main(String[] args) {
String s="abccba";
System.out.println(isSame(s));
}
public static boolean isSame(String s){
if(s.length()==0)
return true;
else if(s.length() == 1)
return true;
else{
char c1=s.charAt(0);
char c2=s.charAt(s.length()-1);
System.out.println(c1+";"+c2);
String strTemp=s.substring(1, s.length()-1);
if(c1 != c2)
return false;
else
return isSame(strTemp);
}
}
}
public static boolean isSame(String str) {
if(str.length() == 1 ||str.length() == 0 ) {
return true;
}
if(str.charAt(0) == str.charAt(str.length() - 1))
return isSame(str.substring(1,str.length()-1));
else
return false;
}
public class ReverseChar {
char head;
char foot;
public static void main(String[] args) {
// TODO Auto-generated method stub
ReverseChar rc = new ReverseChar();
rc.ReverseBegin();
}
void ReverseBegin()
{
String s = new String("12342321");
boolean result = Reversing(s); //invoke mothod to reverse
System.out.println(result);
}
boolean Reversing(String s)
{
if(s.length()<2)return true; //if string's length < 2 return
head = s.charAt(0); //first char
foot = s.charAt(s.length()-1); //last char
if(head == foot) //compare
{
s = s.substring(1, s.length()-1);
return Reversing(s); //recursive
}
else
{
return false; //if not equals return false
}
}
}