我已经尝试过各种语言:php,javascript和c以及ultmately arduino。
为什么不这个代码:
int n = 10;
int total = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
while (n < 100) {
if (n % 2 != 0) {
if (n % 3 != 0) {
if (n % 4 != 0) {
if (n % 5 != 0){
if (n % 6 != 0) {
if (n % 7 != 0) {
if (n % 8 != 0) {
if (n % 9 != 0) {
total++;
n++;
}
}
}
}
}
}
}
}
}
Serial.println(total);
}
除了什么之外?
答案 0 :(得分:2)
这是因为您放置
的位置 n++;
在您的代码中,它位于最里面的范围内。
由于开始时n = 10,n%2!= 0为false,并且该范围内的所有内容,包括n ++;永远不会被称为。因此,n从不递增,因为n%2!= 0重复为假。因此,代码永远不会达到总计的打印,因为它被卡在无限循环中。
对代码的一种可能的修正如下。答案是21。但是,由于你已经在使用while循环,你可以把它放在setup()方法中,否则Arduino只会无限地打印21。
int n = 10;
int total = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
while (n < 100) {
if (n % 2 != 0) {
if (n % 3 != 0) {
if (n % 4 != 0) {
if (n % 5 != 0){
if (n % 6 != 0) {
if (n % 7 != 0) {
if (n % 8 != 0) {
if (n % 9 != 0) {
total++;
}
}
}
}
}
}
}
}
n++;
}
Serial.println(total);
}
从您的目标/目的开始..
如果您发现10到100之间的数字不能除以2到9,则可能的编码方式可能是:
int n = 10;
int total = 0;
void setup() {
Serial.begin(9600);
while (n < 100) {
if (n % 2 != 0) {
if (n % 3 != 0) {
if (n % 4 != 0) {
if (n % 5 != 0){
if (n % 6 != 0) {
if (n % 7 != 0) {
if (n % 8 != 0) {
if (n % 9 != 0) {
Serial.println(n);
total++;
}
}
}
}
}
}
}
}
n++;
}
Serial.print("Total: ");
Serial.println(total);
}
void loop() {
//Serial.println(total);
}
就个人而言,我更喜欢嵌套的IFs
int n = 10;
int total = 0;
bool divisible = false;
int i;
void setup() {
Serial.begin(9600);
while (n < 100) {
divisible = false;
for (i=2; i<=9; i+=1){
if (n%i==0){
divisible = true;
}
}
if (divisible == false){
Serial.println(n);
total++;
}
n++;
}
Serial.print("Total: ");
Serial.println(total);
}
void loop() {
//Serial.println(total);
}
你会得到输出:
11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 Total: 21
希望它有所帮助。
答案 1 :(得分:0)
您的代码结构错误。每次循环都需要增加n
。
这应该有效:
void loop() {
while (n < 100) {
if (n % 2 != 0) {
if (n % 3 != 0) {
if (n % 5 != 0){
if (n % 7 != 0) {
total++;
}
}
}
}
n++; /* Increment needs to be at the base of the loop! */
}
Serial.println(total);
}