Как я могу понять петли, а также как заставить их работать правильно

Я пытаюсь понять, как работают циклы, но я не могу собрать их воедино. Я работаю над программой доставки Java, и все, что я пытаюсь, не будет работать. До сих пор у меня есть, когда целые числа верны, это продолжается с программой, но я хочу, чтобы, когда я ввел недопустимое число (например, ноль или отрицательное число), чтобы запросить снова.

    Scanner input = new Scanner (System.in);

    int weight;
    int distance;
    int rate;

    System.out.println("Welcome to the You Send It We Rend It Shipping Company!"); {
        System.out.println ("How heavy is your package in pounds?");
        weight = input.nextInt();
    }

    while (weight <=1 || weight >=60);{
        System.out.println ("How far will you be shipping the package in miles?");
    distance = input.nextInt();
    }
    while (distance <1);

        double x = 0.00;
        if (weight >= 1) x=5.01;
        if (weight >=11) x=7.02;
        if (weight >=21) x=9.03;
        if (weight >=31) x=11.04;
        if (weight >=41) x=15.00;

        rate = (distance+99)/100;

        System.out.printf ("Your total shipping cost for %d miles is $%s\n",distance, rate*x);


}

Кроме того, я хотел бы полностью понять, почему скорость такая...?

rate = (distance+99)/100;

2 ответа

Вы можете ввести логическое значение. Мы продолжим цикл, если для нашего логического параметра установлено значение false. Если мы сохраняем условие, мы устанавливаем логическое значение true и покидаем цикл.

boolean validWeight = false;
while(!validWeight)
{
     System.out.println ("How heavy is your package in pounds?");
     weight = input.nextInt();
     if(weight > 1 && weight <60)
          validWeight = true;
}

Также осторожно с этой строкой:

while (distance <1);

что эквивалентно

while(distance < 1)
{
     //do nothing
}

если расстояние установлено на единицу меньше единицы, вы будете в бесконечном цикле.

Та же проблема с

 while (weight <=1 || weight >=60);

Ввод ";" сразу после условного высказывания - это то же самое, что

{
     //do nothing
}

Который только вызовет вам много проблем

Например, если вы хотите, чтобы пользователь ввел правильный вес, вы можете использовать следующий цикл:

    int weight = 0;
    Scanner input = new Scanner(System.in);
    do {
        System.out.println("How heavy is your package in pounds?");
        weight = input.nextInt();
        if (weight <= 0) {
            System.out.println("Weight should be a positive integer, please enter again!");
        }
    } while (weight <= 0);
Другие вопросы по тегам