Java -for循环中的Print语句不打印任何内容

xyhw6mcr  于 2023-06-20  发布在  Java
关注(0)|答案(3)|浏览(178)

我写了一个简单的for循环,打印字符串开头的第一个字符,然后打印字符串结尾的第一个字符。等等,但是print语句没有显示任何内容,为什么?

public class JavaOOP {

    public static void main(String args[]){

        String string = "abca";

        for(int i=0,j=string.length()-1;i<string.length()/2+1 && j>string.length()/2+1;i++,j--){
            System.out.println(string.charAt(i)+ " " + string.charAt(j));
        }
  
    }
}
vuktfyat

vuktfyat1#

不需要循环。

  • "... print语句不显示任何内容,为什么?“*

这是因为for-loop条件语句的第二个条件语句永远不会满足,因此循环永远不会迭代。

j>string.length()/2+1

您可以使用 String#length 值捕获最后一个值。
请记住,由于字符是使用从0开始的索引引用的,因此最后一个字符将是长度减1。

String string = "abca";
char first = string.charAt(0);
char last = string.charAt(string.length() - 1);

System.out.println(first + " " + last);

输出量

a a

你可以使用循环来递归地捕获第一个和最后一个字符。

void traverse(String string) {
    if (string.length() <= 1) return;
    System.out.println(string.charAt(0) + " " + string.charAt(string.length() - 1));
    traverse(string.substring(1, string.length() - 1));
}

示例输出,当 string 为,“堆栈溢出” 时。

s w
t o
a l
c f
k r
  e
o v
332nm8kg

332nm8kg2#

请注意,j从3开始,在本例中,当j大于3时,条件检查,因此循环不会运行。
还请注意,这两个条件可以简化为i < j
您还可以选择将.charAt(x)简化为[x]

abcd:
a d
b c

abcde:
a e
b d
c c
public class JavaOOP {
    public static void main(String[] args) {
        String string = "abcd";

        for(int i=0, j=string.length() - 1; i < j; i++,j--) {
            System.out.println(string[i]+ " " + string[j]);
        }
    }
}
uwopmtnx

uwopmtnx3#

你甚至不需要两个变量:

String input = /* some input */;
int len = input.length();
for (int i = 0; i < len / 2; i++) {
    System.out.println(input.charAt(i) + " " + input.charAt(len - 1 - i));
}
if (len % 2 == 1) { //account for middle character in odd-length string
    System.out.println(" " + input.charAt(len / 2)); //spaces it "in the middle"
}

本质上,您使用的是String的对称性。需要字符与字符串的两端具有相同的距离(索引为0input.length() - 1)。所以i是你到两端的距离,计算为0 + iinput.length() - 1 - i
这将导致(不重复奇数长度字符串中的字符):

Input: abcde
a e
b d
 c

Input: abcdef
a f
b e
c d

相关问题