对于字符串中的每个字符,从右到左读取每个字符

For each character in string, read each one from right to left

我有这个伪代码,它将二进制值转换为十进制值:

int powTwo = 1;
int dec = 0;
for each character in the string, starting with the last,
if (char == '1')
    dec += powTwo;
    powTwo *= 2;

我如何编写此处指定的 for each 循环,它从最后一个字符开始查看字符串中的每个字符? 到目前为止我有

for(Character c : someString)

我假设这是家庭作业,您应该忠实于伪代码,不要使用其他可用的快捷方式。

几乎伪代码唯一缺少的是 for 循环。在您的真实代码中,我不使用 for-in,而是将字符串向后移动:

int powTwo = 1;
int dec = 0;
// using the length of the string, start with a counter that is the length
// minus 1, decrement it by 1 until we get to 0
for (int i = someString.length() - 1; i >= 0; i--) {
    // Get the character at position i in the string
    char currentChar = someString.charAt(i);
    // Check for a "1"
    if (currentChar == '1') {
        dec += powTwo;
    }
    powTwo *= 2;
}

我建议使用 StringBuilder#reverse。您可以反转 String 并循环遍历每个字符而不会造成任何混淆 for-loop

String initialValue = "Hello World!";
StringBuilder sb = new StringBuilder(initialValue);

String reversed = sb.reverse().toString();

char[] chars = reversed.toCharArray();

for (char c : chars) {
    // Check for a "1"
    if (c == '1') {
        dec += powTwo;
    }

    powTwo *= 2;
}

// output: !dlroW olleH

Cory所说,您可以从最后一个开始迭代并比较每个字符。

另一种方法是这样的,它确实有一个 for each 循环,正如你在问题中提到的

String reversedString=new StringBuffer(inputString).reverse().toString();
for(char c:reversedString.toCharArray()){
    // Do Whatever You want to Do here 
}

For-each 循环(高级或增强的 For 循环):

Java5 中引入的 for-each 循环。主要用于遍历数组或集合元素。 for-each 循环的优点是消除了出现错误的可能性,使代码更具可读性。

for-each 循环的语法:

for(data_type variable : array | collection){}