用于抓取字符串中某些字符的循环



如果我有一个字符串和一个int,我希望能够创建一个循环,以打印字符串的第一个字符,然后每个char以该int值的值。

例如。如果我有"奇迹"和int 2一词,则结果应该是" Mrce"。我的代码执行此操作,但停止了某些单词的简短。

  System.out.println(str.charAt(0));

  while (n <= str.length())
  {
    System.out.println(str.charAt(n));
    n = n+n;
  }

这适用于诸如" abcdefg"和int 3的字符串。它打印为" adg",但是如果字符串为"奇迹"和int 2,它将打印" mrc"而不是" mrce"。

我很确定问题在" n = n n"语句中。

因为如果int为3,并且字符串大于3,则它将循环,但是在n = n n语句中,它将循环足够循环,以使n将大于str长度并且停止。

我该如何纠正?

您是对的,您的问题与n=n+n有关

这样更改您的代码:

int m = 0;
while (m < str.length())
{
   System.out.println(str.charAt(m));
   m = m+n;
}

n = n+n;表示在每次迭代中,您都将n乘以2,所以

iteration | n 
----------+-------
1         | 3
2         | 3+3=6
3         | 6+6=12

等等。

您需要的是临时变量(迭代器),它将使用n,但不会更改它。

通常,更可读的写作方法是用

for循环使用
for (int i = 0; i < str.length(); i = i+n){//or `i += n`
     ^^^^^^^^^  ^^^^^^^^^^^^^^^^  ^^^^^^^
//   start at   continue when     in next step
    System.out.print(str.charAt(i));
}

我会反复回答:这是在哪里提到的?它应该拥有什么一部,有什么价值?

简而言之,您应该有一个具有一个步骤值的变量,另一个可用作光标的变量。

之类的东西
int cursor = 0;
while (cursor <= str.length()) {
    System.out.println(str.charAt(cursor));
    cursor += stepValue;
}

在这里,您可以看到这里有两个不同的变量。

它在最初的几个实例中工作为2 2 = 4,但是之后 - 它的执行4 4 = 8,而您需要的是4 2 = 6。

采用新的var(v),为其分配初始值,&amp;而不是做n = n + n,而是做

n = n + v

我认为这就是您需要的

int n = 0;
int skip = 2;
while (n < str.length())
{
  System.out.println(str.charAt(n));
  n+=skip;
}

首先,您在这里有错误:

n <= str.length()

应该是

n < str.length()

因为字符串从0到长度为1。还要确保您的索引是从0起,而不是从1开始。另一件事是您每次都会添加更大的数字。因此,是的 - 您对N N是对的 - 这是错误的。您应该做这样的事情:

n = ...;
for (int i = 0; n * i < str.length(); ++i)
{
    int index = n * i;
    System.out.println(str.charAt());
}

这样,您拥有n * 0,n * 1,n * 2,...,这是您想要的。

您的代码中有两个错误:

  • 如果 n == str.length(),它会引发异常,因为它试图访问str.charAt(n),在这种情况下不存在。

  • 另一件事,n = n + n每次都会更改n的值,所以您每次都会添加更大的数字。

您可以使用循环的方法来清洁方法:

for (int i = 0; i < str.length(); i += n) {
    System.out.println(str.charAt(i));
}

最新更新