我正在嘗試將 char 陣列 c 與 s 進行比較,以找出 c 在索引 i 處是否不包含 s 的任何元素。因此我同時增加 i 和 k ,但它對我不起作用。
代碼應檢查輸入的數字是否屬于十進制系統(例如:70 和 12B)。對于 70,應檢查索引 0 和 1 (char[] c) 處的字符是否位于 char 陣列 s 內。對于 12B,將在 char 陣列 s 中檢查索引 0、1 和 2,只是發現 char 陣列 s 不包含索引 2(“B”)。我希望我能把它說得更清楚一點。
public static boolean isDecimal(String number) {
boolean t = true;
char[] s = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
char[] c = number.toCharArray();
for (int i = 0; i < number.length(); i ) {
for (int k = 0; k < 9; k ) {
if (c[i] != s[k]) {
t = false;
}
}
}
return t;
}
uj5u.com熱心網友回復:
首先,有更好的方法來檢查給定的字串是否僅由數字組成。但是讓我們“除錯”你的代碼。
在偽代碼中,您嘗試執行以下操作:
public static boolean isDecimal(String number) {
char[] s = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
char[] c = number.toCharArray();
boolean t = true;
for (int i = 0; t && i < number.length(); i ) {
t = s contains c[i]
}
return t;
}
問題是,您的內部回圈不會測驗 if s contains c[i]
,但如果至少有一個數字不同于c[i]
(當然,它總是評估為true
)。
k < 9
另一個(次要)問題是,由于內部回圈中的條件,您沒有測驗 s 的所有元素。
如何解決這個問題?基本上,你必須顛倒邏輯:
boolean found = false;
for (int k = 0; !found && k < s.length; k ) { // note the correct condition
found = (c[i] == s[k]);
}
有了這個,found == true
如果(且僅當)s
包含c[i]
. 接下來,您可以確定 if found == false
,number
包含非數字。
讓我們把所有的放在一起:
public static boolean isDecimal(String number) {
char[] s = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
char[] c = number.toCharArray();
for (int i = 0; i < number.length(); i ) {
boolean found = false;
for (int k = 0; !found && k < s.length; k ) {
found = (c[i] == s[k]);
}
if (!found) return false;
}
return true;
}
不用說,有更好的選擇來執行這個檢查,但我想這只是學習一些東西的代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/515359.html
標籤:爪哇数组for循环