我是 Java 新手,我還在學習。作為我學習的一部分,我接受了一個挑戰,撰寫了一個接受字串的程式,并檢查是否有任何長度為 5 或更多的單詞,如果有,它將翻轉 5 長單詞中的字符. 挑戰是在不使用 Collections.reverse(list) 或 StringBuilder 的情況下做到這一點。
我的想法是,我會說撰寫 2 種方法很簡單。Main 將拆分字串,并通過每個字串陣列索引進行迭代以查找 5 長單詞,并且在 'if' 條件內觸發名為 'reverse' 的方法。看起來這個作業正常。對于反向方法的想法是將單詞拆分為一個陣列,然后借助 2 個嵌套的“for”回圈通過“ori”和輔助“rev”陣列的索引進行迭代,以將索引 ori[i] 的值分配給索引 rev [j]。
因此,從 i=0 和 j=arr.length-1 開始,將 ori[0] 中的句子單詞中的值“s”分配給 rev[7],然后將 ori[1] 中的“e”分配給 rev[6 ],依此類推,所以結果將是 [e, c, n, e, t, n, e, s]
相反,我得到這樣的輸出:
[This, [e, e, e, e, e, e, e, e], will, [n, n, n, n, n, n, n], [s, s, s, s, s], with, more, than, five, [., ., ., ., ., ., ., .]]
我試圖解決很多方法,但到目前為止我的邏輯失敗了。有人可以解釋一下,我做錯了什么,我是如何搞砸這個看似簡單的邏輯的?
稍后我將弄清楚如何將其顯示為不帶方括號和逗號的常規句子,因此到目前為止這不是問題。
代碼:
import java.util.Arrays;
public class Main {
public static void main (String[] args) {
String original = "This sentence will contain words with more than five letters.";
String[] splitter = original.split(" ");
for (int i = 0; i < splitter.length; i ){
if (splitter[i].length() >= 5){
splitter[i] = reverse(splitter[i]);
}
}
System.out.println(Arrays.toString(splitter));
}
public static String reverse (String s){
String [] ori = s.split("");
String [] rev = new String[ori.length];
for (int i = 0; i < rev.length; i ) {
for (int j = rev.length-1; j >=0; j--) {
rev[j] = ori[i];
}
}
s = Arrays.toString(rev);
return s;
}
}
請理解新手:)
我試圖修改這部分:
public static String reverse (String s){
String [] ori = s.split("");
String [] rev = new String[ori.length];
for (int i = 0; i < rev.length; i ) {
for (int j = rev.length-1; j >=0; j--) {
rev[j] = ori[i];
通過交換 i/j、rev[i] = ori[j]、--j、j > 0 和許多其他方法,主要是盲目拍攝,在我的邏輯失敗的地方尋找一些靈感。
uj5u.com熱心網友回復:
Hy Pawel Niewolak,問題在于您的反向功能。
根據您的要求使用:
public static String reverse(String s) {
String[] ori = s.split("");
String[] rev = new String[ori.length];
for (int i = 0; i < rev.length; i ) {
rev[i] = ori[rev.length - i - 1];
}
s = "";
for (String str : rev) {
s = str;
}
return s;
}
}
uj5u.com熱心網友回復:
這是使用現有字符陣列的另一種可能性。
- 使用創建陣列
String.toCharArray() - 遍歷陣列的中途,只需交換向內移動的結束字符。
- 然后由于 String 建構式將一個字符陣列作為引數,因此回傳
new String(array)
public static String reverse(String s) {
char[] array = s.toCharArray();
for (int i = 0; i <array.length/2; i ) {
char ch = array[i];
array[i] = array[array.length-i-1];
array[array.length-i-1] = ch;
}
return new String(array);
}
請注意,對于偶數長度的字串,中間兩個字符被交換。對于奇數長度的字串,中間字符不受影響。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/455730.html
