如果我有一个字符串和一个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长度并且它停止。
我该如何纠正?
答案 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));
}