如果我有一个字符串和一个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));
}