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

时间:2015-05-05 11:49:55

标签: java

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

e.g。如果我有“#34; Miracle"和int 2,结果应该是" Mrce"。我的代码执行此操作,但会停止某些单词的字符缩写。

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


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

这适用于&#34; abcdefg&#34;等字符串。它打印&#34; adg&#34;,但如果字符串是&#34;奇迹&#34;和int 2,它打印&#34; mrc&#34;而不是&#34; mrce&#34;。

我很确定问题出在&#34; n = n + n&#34;言。

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

我该如何纠正?

7 个答案:

答案 0 :(得分:5)

你是对的,问题在于n=n+n,因为它在每一步都有多个n和2,所以你必须改变它。

像这样更改你的代码:

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

答案 1 :(得分:3)

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));
}

答案 2 :(得分:0)

我会以一种反驳的方式回答:这在哪里被提及?它应该具有什么样的价值,它有什么价值?

简而言之,你应该有一个具有步长值的变量和另一个充当光标的变量。

这样的东西
int cursor = 0;

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

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

答案 3 :(得分:0)

它适用于前几个实例,因为2 + 2 = 4,但在此之后 - 它做4 + 4 = 8,而你需要的是4 + 2 = 6。

取一个新的var(v),给它分配初始值,&amp;而不是做n = n + n,做

n = n + v

答案 4 :(得分:0)

我认为这就是你需要的

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

答案 5 :(得分:0)

首先,你在这里有一个错误:

n <= str.length()

应该是

n < str.length()

因为字符串从0索引到length-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,...,这就是你想要的。

答案 6 :(得分:0)

您的代码有两个问题:

  • 如果n == str.length(),它将尝试抛出异常 访问str.charAt(n),在这种情况下不存在。

  • 另一件事,n = n + n每次都会改变n的值,所以你 每次都会添加一个更大的数字而不是相同的数字。

您可以使用for循环来获得更清晰的方法:

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