所以我对基本java的工作原理仍然不稳定,这是我写的一个方法,但是并不完全理解它是如何解释的?
它应该取s值并以相反的顺序返回。
编辑:主要是for循环让我感到困惑。
所以说我输入“12345”我希望我的输出为“54321”
Public string reverse(String s){
String r = "";
for(int i=0; i<s.length(); i++){
r = s.charAt(i) + r;
}
return r;
}
答案 0 :(得分:4)
我们对String a的最后一个索引执行for循环,将添加将索引i的carater添加到String s中, add 这里是一个串联:
示例强>
String z="hello";
String x="world";
==&GT; x+z="world hello" #different to z+x ="hello world"
适用于您的情况:
String s="";
String a="1234";
s=a.charAt(0)+s ==> s= "1" + "" = "1" ( + : concatenation )
s=a.charAt(1)+s ==> s='2'+"1" = "21" ( + : concatenation )
s=a.charAt(2)+s ==> s='3'+"21" = "321" ( + : concatenation )
s=a.charAt(3)+s ==> s='3'+"321" = "4321" ( + : concatenation )
等。
public String reverse(String s){
String r = ""; //this is the ouput , initialized to " "
for(int i=0; i<s.length(); i++){
r = s.charAt(i) + r; //add to String r , the caracter of index i
}
return r;
}
答案 1 :(得分:3)
此代码的作用如下
创建一个新变量r =“”;
然后循环输入lenght中的字符串,它在r的开头添加循环的当前字符。
答案 2 :(得分:3)
进入循环时,r。中有空字符串
Now r=""
在第一次迭代中,您将获取第一个字符(i = 0)并将r
附加到其中。
r = "1" + "";
Now r=1
在第二次迭代中,您将获取第二个字符(i = 1)并将r
附加到其中
r = "2" + "1";
Now r=21
您可以在这样的纸张上追踪执行情况,然后您就可以轻松了解正在发生的事情。
答案 3 :(得分:1)
该方法正在做的是从字符串s
中获取每个字符并将其放在新字符串r
的前面。重命名变量可能有助于说明这一点。
public String reverse(String s){
String alreadyReversed = "";
for(int i=0; i<s.length(); i++){
//perform the following until count i is as long as string s
char thisCharacterInTheString = s.charAt(i); // for i==0 returns first
// character in passed String
alreadyReversed = thisCharacterInTheString + alreadyReversed;
}
return alreadyReversed;
}
所以在for
循环的第一次迭代中alreadyReversed
等于1
+本身(一个空字符串)。
在第二次迭代alreadyReversed
等于2
+本身(1
)。
然后3
+本身(21
)。
然后4
+ 321
。
然后5
+ 4321
。
答案 4 :(得分:0)
返回问题陈述(获取输入字符串并以相反的顺序生成输出字符串)。然后考虑如何执行此操作(而不是如何编写Java代码来执行此操作)。
您可能会提出两种选择:
您的伪代码结果可能类似于以下
选项1
let l =输入字符串的长度
将输出字符串设置为“”
而l&gt; 0
将输入字符串的“第l”字符添加到输出字符串
从l
选项2 留下作为提问者的练习。
然后你会考虑如何编写Java来处理你的算法。你会发现有几种方法可以获得字符串的“第l”字符。首先,在Java中,长度为l的字符串在位置0到l-1中具有字符。您可以使用string.charAt(loc)
或string.substring(loc,loc+1)
来获取位置loc