Циклы ввода без использования Ints

Я работал над этим и искал так долго. Я очень новичок (как через неделю) в этом, и я не могу понять, как зациклить (сделать / в то время и т. Д.) Месяц или цвет ввода. Я только смог найти справку по циклу в отношении Int. Я прочитал, что мне, возможно, придется преобразовать в int. Извините, если этот вопрос слишком расплывчатый. Это для класса, и я пытаюсь учиться, так что, если вы не возражаете, объяснения также в простых терминах.

package FortuneTeller;

import java.util.Scanner;

public class FortuneTeller {

    private static Scanner input;

    public static void main(String[] args) {
        input = new Scanner(System.in); 

        System.out.println("Hello human. What is your first name?");
        String name = input.nextLine();

        System.out.println("And your last?");
        String name2 = input.nextLine();

        System.out.println(name + " "+ name2 + "? Interesting. What is your age?");
        int age = input.nextInt();

        System.out.println("What number earth month were you born in?");
        int month;
        **month = input.nextInt();**
        switch (month) {
            case 1:
                System.out.println("January");
                break;
            case 2:
                System.out.println("February");
                break;
            case 3:
                System.out.println("March");
                break;
            case 4: 
                System.out.println("April");
                break;
            case 5:
                System.out.println("May");
                break;
            case 6:
                System.out.println("June");
                break;
            case 7:
                System.out.println("July");
                break;
            case 8:
                System.out.println("August");
                break;
            case 9:
                System.out.println("September");
                break;
            case 10:
                System.out.println("October");
                break;
            case 11:
                System.out.println("November");
                break;
            case 12:
                System.out.println("December");
                break;
            default:
                System.out.println("This is no Earth month. What EARTH month were you born in?");
                break;
        }

        System.out.println("Favorite ROYGBIV color. Type \"Help\" if you are unsure of the reference.");
        String color;
        **color = input.next();**
        switch (color.toLowerCase()) {
                case "red":
                System.out.println("What is your number of siblings?");
                break;
            case "orange":
                System.out.println("What is your number of siblings?");
                break;
            case "yellow":
                System.out.println("What is your number of siblings?");
                break;
            case "green":
                System.out.println("What is your number of siblings?");
                break;
            case "blue":
                System.out.println("What is your number of siblings?");
                break;
            case "indigo":
                System.out.println("What is your number of siblings?");
                break;
            case "violet":
                System.out.println("What is your number of siblings?");
                break;
            case "help":
                System.out.println("ROYGBIV consist of Red. Orange. Yellow. Green. Blue. Indigo. Violet." +"\n"
                + "What is your favorite ROYGBIV color?");
                break;
            default:
                System.out.println("This is an invalid color. Type \"Help\" if you are unsure of the reference. "); 
        }

        int siblings = input.nextInt();

        System.out.println("Thank you!" + "\n" 
            + name + name2 );

        if (age %2==0) {
            System.out.println("You will hit the lottery in the next 10 years.");
        } else; {
            System.out.println("You will come into a high paying, enjoyable job in the next 5 years.");
        }

        if (siblings ==1) {
            System.out.println("You will live in a new place every 5 years.");
        }

        if (siblings ==2) {
            System.out.println("You will live in your home town and make it a better place with your resources.");
        }

        if (siblings ==3) {
            System.out.println("You and your three siblings will live successfully in a major city abroad.");
        }

        if (siblings >4) {
            System.out.println("You will start a comunie with all of your family in a beautiful remote place.");
        } else {
            System.out.println("An unexspected surprise will land you in a beautiful forign city with everything you need.");
        }

        switch (color) {
            case "Red" :
                System.out.println("You will travel by car");
                break;
            case "Orange" :
                System.out.println("You will travel by hot air balloon.");
                break;
            case "Yellow" :
                System.out.println("You will travel by plane");
                break;
            case "Green" :
                System.out.println("You will travel by train");
                break;
            case "Blue" :
                System.out.println("You will travel by boat");
                break;
            case "Indigo" :
                System.out.println("You will travel by submarine");
                break;
            case "Violet" :
                System.out.println("You will travel by big rig");
        }

        if ((month ==1) || ( month ==2) || (month ==3) || (month==4)) {
            System.out.println("Consider taking more time to read");
        } else if ((month ==5) || (month ==6) || (month ==7) || (month ==8)) {
            System.out.println("Consider taking on a mechanical hobby");
        } else if ((month ==9) || (month ==10) || (month ==11) || (month ==12)) {
            System.out.println("Consider taking on an artistic hobby");
        } else {
            System.out.println("Continue to attract atoms. The culmination will be worth wile.");
        }
    }
}

1 ответ

Ах, ваше разъяснение "зацикливание каждой части в случае неправильного ввода" делает намного более понятным то, что вы просите. Вы хотите что-то вроде:

// declare & init a boolean variable "monthIsValid" to false
while (!monthIsValid) {
    // ...the code to ask for the month and print it, like you already have
    }

кроме того, что внутри цикла вы хотите установить monthIsValid в true в каждом из 12 случаев. (Ну, это очень повторяется; вы можете быть "подлый" и установить monthIsValid в true прямо перед тем, как вы попросите об этом, а затем только в default/ неверный случай вы вернетесь и установите его в false.)

Поймите, что это назначение программы немного сложное. В частности, мне практически никогда не нужна switch заявление; я так чувствую if-else-if будет более подходящим для ученика (так как это базовая конструкция, которая будет обслуживать вас много раз). Некоторые люди считают, что если вы знаете массивы, есть гораздо более простые способы решения этой проблемы (поэтому не думайте, что программирование по своей сути однообразно). Кроме того, в моем обучающем Java я фокусируюсь на наличии отдельных функций (поэтому я мог бы попросить отдельную функцию colorMessage который принимает строку и возвращает строку или возвращает значение Sentinel, если нет соответствующего сообщения). Это разложило бы эту большую бессвязную проблему на более красивые, автономные куски.

Другие вопросы по тегам