这里有一个D练习:
import std.stdio;
void main()
{
int[] narray;
while(true) {
writeln("Enter your numbers: ");
int tmp;
readf(" %s", &tmp);
if(tmp == -1) {
writeln("It's -1, finish reading numbers.");
break;
}
else {
writeln("Storing ", tmp, " to array.");
narray ~= tmp;
printArray(narray);
}
}
int[] narrayOdd;
int[] narrayEven;
int counter = 0;
while(counter < narray.length) {
if((counter % 2) == 0) {
narrayEven ~= narray[counter];
}
else {
narrayOdd ~= narray[counter];
}
}
narrayOdd.sort;
narrayEven.sort;
writeln("Your numbers in odd positions sorted: ");
printArray(narrayOdd);
writeln("Your numbers in even positions sorted: ");
printArray(narrayEven);
}
void printArray(int[] x) {
int counter;
while(counter < x.length) {
write(x[counter], " ");
counter++;
}
write("n");
}
当用户输入-1时,我本想打破while循环,但它拒绝这样做。有什么问题吗?
我同时尝试了dmd和ldc2。
当您输入-1时,确实突破while循环,然后继续进入下一个while循环。您正在检查while(counter < narray.length)
,但从未递增计数器。尝试:
while(counter < narray.length) {
if((counter % 2) == 0) {
narrayEven ~= narray[counter++];
}
else {
narrayOdd ~= narray[counter++];
}
}
或:
foreach(counter , value ; narray) {
if((counter % 2) == 0) {
narrayEven ~= value;
}
else {
narrayOdd ~= value;
}
}
在第二种形式中,foreach
循环创建两个临时变量。counter
表示每个元素的索引并自动递增,value
表示该索引处的值。
如果您不熟悉foreach
,请查看此处。对于在集合上迭代,foreach
通常比while
更可取,除非您有充分的理由这样做。