13循环的可分性

时间:2016-11-01 14:44:02

标签: java loops if-statement while-loop

2个小时,我和我的朋友一直在尝试做我们的Java作业,但我们陷入困境。基本上,你输入一个数字n,该程序应该显示不可分割的第一个n数字.13。忽略其余的代码,因为整个作业是一个程序。它是代码的最后一部分。

import java.util.Scanner;

public class Loop {
    public static void main (String[]args) {
        Scanner in = new Scanner(System.in);
        int eingabe,quadrat;
        int i = 0; //ungerade Zahl Zähler
        int i2 = 0; //Quadratzahler Zähler
        int i3 = 0; //Quadratzahl inkrementierer
        int i4 = 0;
        int i5 = 0;
        int zahl = 1;
        int zahl2 = 1;
        int zahl3 = 1;
        System.out.println("Geben Sie eine Zahl ein");
        eingabe = in.nextInt();

        System.out.println("Das sind die ungeraden Zahlen");

        while (eingabe >i) {
            if (zahl%2 !=0) {
                System.out.print(zahl + " ");
                i++;
            }
            zahl = zahl + i;            
        }

        System.out.println("\nDas sind die Quadratzahlen");
        while (eingabe>i2) {
            quadrat = zahl2 * zahl2;
            if (quadrat%2==0){
                System.out.print(quadrat +" ");
                i2++;
            } else {
                i3++; /*Dieser Zähler ist nur dafür da damit die Zahl mit der gerechnet wird
                        immer um 1 erhöht wird. Ansonsten wäre es eine Dauerschleife weil 1*1 =1 und i2 würde sich nie inkrementieren
                      */
                zahl2 = zahl2 + i3;
            }
            zahl2 = zahl2 + i2;
        }       

        System.out.println("\nDas sind die durch 13 teilbaren zahlen");

        /////THIS IS THE PART ABOUT THE QUESTION        
        while (eingabe >i4) {
            if (zahl3%13 ==0) {
                System.out.print(zahl3 + " ");
                i4++;
            } else {
                System.out.println("wrong");
                zahl3 = zahl3 + i4;
            }
            zahl3 = zahl3 + i4;             
        }
    }
}

2 个答案:

答案 0 :(得分:1)

问题来自你的循环条件,以及你如何增加" zahl3",你应该增加" zahl3"仅在每个循环之后(由1)。 如果你想看看你的代码实际上做了什么,你可以在每个循环的入口处打印zahl3的值,所以你会看到你没有检查所有的数字。

while (eingabe >i4) {
        if (zahl3%13 ==0) {
        System.out.print(zahl3 + " ");
        i4++;
        } else {
            System.out.println("wrong");
            zahl3 = zahl3 + i4; // <== Delete this line 
        }
        zahl3 = zahl3 + i4; // <== change this one to zahl3++;
    }

答案 1 :(得分:0)

首先看问题。

   while (eingabe >i4) // infinite loop as i4 is changing only in if condition.
 //It should have a condition where it can break
     {
                    if (zahl3%13 ==0) {
                        System.out.print(zahl3 + " ");
                        i4++;
                    } else {
                        System.out.println("wrong");
                        zahl3 = zahl3 + i4; // already incremented at end. Not required 
                    }
                    zahl3 = zahl3 + i4; // you making it double of its value            
                }

可能的解决方案

    while (eingabe >= zahl3) // A condition where it can break
 {
                if (zahl3%13 ==0) {
                    System.out.println(zahl3 + " correct ");

                } else {
                    System.out.print(zahl3 + " ");
                    System.out.println("wrong");
                  //  zahl3 = zahl3 + i4;
                }

                zahl3++;    // increment it by one     

            }

输出:如果eingabe为15

1 wrong
2 wrong
3 wrong
4 wrong
5 wrong
6 wrong
7 wrong
8 wrong
9 wrong
10 wrong
11 wrong
12 wrong
13 correct 
14 wrong
15 wrong