Java 我在方法中得到了正确的反向字符串,但当我返回main()时,它将错误的字符串显示为输出
尝试内置的反向方法Java 我在方法中得到了正确的反向字符串,但当我返回main()时,它将错误的字符串显示为输出,java,Java,尝试内置的反向方法 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package revstring; /** * * @author Pawan */ public class RevString { private String substr=""; private String temp=""; priv
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package revstring;
/**
*
* @author Pawan
*/
public class RevString {
private String substr="";
private String temp="";
private static int strLength=0;
private String reversed="";
public String revString(String str)
{
Character ch;
strLength=str.length();
System.out.println("length- "+strLength);
if(strLength!=0)
{
ch=str.charAt(strLength-1);
temp=temp+ch;
substr=str.substring(0,strLength-1);
if(substr.equals("")){reversed=temp; return reversed;}
return temp+revString(substr);
}
return reversed;
}
public static void main(String[] args) {
RevString rev=new RevString();
System.out.println("reversed string- "+rev.revString("PAWAN"));
}
}
另一方面,代码中的问题是,您的类成员应该是方法变量,这意味着您有太多的状态。问题恰恰在于
temp
变量。要修复此问题,请将此行添加到方法的开头:
String str= "reverse";
StringBuffer sb= new StringBuffer(str);
//reverse
String result= sb.reverse().toString();
System.out.println(result);
未来提示 如果不打算在其他方法中使用变量/由其他类读取,请不要将变量作为类成员(字段)放置。类成员仅用于状态。在方法中本地化所有变量
public String revString(String str)
{
temp = ""; //this line
Character ch;
尝试内置的反向方法
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package revstring;
/**
*
* @author Pawan
*/
public class RevString {
private String substr="";
private String temp="";
private static int strLength=0;
private String reversed="";
public String revString(String str)
{
Character ch;
strLength=str.length();
System.out.println("length- "+strLength);
if(strLength!=0)
{
ch=str.charAt(strLength-1);
temp=temp+ch;
substr=str.substring(0,strLength-1);
if(substr.equals("")){reversed=temp; return reversed;}
return temp+revString(substr);
}
return reversed;
}
public static void main(String[] args) {
RevString rev=new RevString();
System.out.println("reversed string- "+rev.revString("PAWAN"));
}
}
另一方面,代码中的问题是,您的类成员应该是方法变量,这意味着您有太多的状态。问题恰恰在于
temp
变量。要修复此问题,请将此行添加到方法的开头:
String str= "reverse";
StringBuffer sb= new StringBuffer(str);
//reverse
String result= sb.reverse().toString();
System.out.println(result);
未来提示 如果不打算在其他方法中使用变量/由其他类读取,请不要将变量作为类成员(字段)放置。类成员仅用于状态。在方法中本地化所有变量
public String revString(String str)
{
temp = ""; //this line
Character ch;
您的问题是将变量用作类变量,即substr、temp、strLength、REVERSE应该在revString()中。 然后它就起作用了 固定的:
public static class RevString {
public String revString(String str)
{
int strLength=str.length();
System.out.println("length- "+strLength);
String reversed=str;
if(strLength!=0)
{
Character ch=str.charAt(strLength-1);
String temp=""+ch;
String substr=str.substring(0,strLength-1);
if(substr.equals("")){reversed=temp; return reversed;}
return temp+revString(substr);
}
return reversed;
}
您的问题是将变量用作类变量,即substr、temp、strLength、REVERSE应该在revString()中。 然后它就起作用了 固定的:
public static class RevString {
public String revString(String str)
{
int strLength=str.length();
System.out.println("length- "+strLength);
String reversed=str;
if(strLength!=0)
{
Character ch=str.charAt(strLength-1);
String temp=""+ch;
String substr=str.substring(0,strLength-1);
if(substr.equals("")){reversed=temp; return reversed;}
return temp+revString(substr);
}
return reversed;
}
temp变量已包含完全反转的字符串。如果你更换
public class RevString {
public String revString(String str) {
String substr="";
String temp="";
int strLength=0;
String reversed="";
Character ch;
strLength=str.length();
System.out.println("length- "+strLength);
if(strLength!=0)
{
ch=str.charAt(strLength-1);
temp=temp+ch;
substr=str.substring(0,strLength-1);
if(substr.equals("")){reversed=temp; return reversed;}
return temp+revString(substr);
}
return reversed;
}
public static void main(String[] args) {
RevString rev=new RevString();
System.out.println("reversed string- "+rev.revString("PAWAN"));
}
}
与
您的代码工作正常
@sotix当然是对的:您不应该像这样使用成员变量。临时变量已经包含完全颠倒的字符串。如果你更换
public class RevString {
public String revString(String str) {
String substr="";
String temp="";
int strLength=0;
String reversed="";
Character ch;
strLength=str.length();
System.out.println("length- "+strLength);
if(strLength!=0)
{
ch=str.charAt(strLength-1);
temp=temp+ch;
substr=str.substring(0,strLength-1);
if(substr.equals("")){reversed=temp; return reversed;}
return temp+revString(substr);
}
return reversed;
}
public static void main(String[] args) {
RevString rev=new RevString();
System.out.println("reversed string- "+rev.revString("PAWAN"));
}
}
与
您的代码工作正常
@sotix当然是对的:您不应该像这样使用成员变量。如果您尝试递归,那么您可以稍微简化您的方法:
return temp;
如果您正在尝试递归,则可以稍微简化您的方法:
return temp;
您不应该对局部变量使用类属性 如果运行代码,您将获得:
Character ch;
String substr="";
String temp="";
int strLength=0;
String reversed="";
因为每次通话都会共享temp。
将substr、temp、strLength的声明放在revString()的开头 不应该对局部变量使用类属性 如果运行代码,您将获得:
Character ch;
String substr="";
String temp="";
int strLength=0;
String reversed="";
因为每次通话都会共享temp。
将substr、temp、strLength的声明放在revString()的开头 你的代码给我这个输出
length-5 length-4 length-3 length-2 length-1 reversed string-NNANAWNAWANAWAP
你的代码给我这个输出length-5 length-4 length-3 length-2 length-1 reversed string-NNANAWNAWANAWAP