Бағдарлама күтілген нүктеден тоқтап қалмайды (жолды қабылдау үшін)

import java.util.Scanner;

public class Power1Eng {

    public static void main(String[] args) {

        double x, prod = 1;
        int n;
        String s;

        Scanner input = new Scanner(System.in);

        System.out.print("This program prints x(x is a real number) raised to the power of n(n is an integer).\n");

        outer_loop:
        while (true) {
            System.out.print("Input x and n: ");
            x = input.nextDouble();
            n = input.nextInt();

            for (int i = 1; i <= n; i++) {
                prod *= x;
            }

            System.out.printf("%.1f raised to the power of %d is %.4f. Do you want to continue?(Y/N) ", x, n, prod);
            s = input.nextLine();

            if (s.equals("Y"))
                continue;
            else if (s.equals("N"))
                break;
            else {
                inner_loop:
                while (true) {
                    System.out.print("Wrong input. Do you want to continue?(Y/N) ");
                    s = input.nextLine();

                    if (s.equals("Y"))
                        continue outer_loop;
                    else if (s.equals("N"))
                        break outer_loop;
                    else
                        continue inner_loop;
                }   
            }   
        }       
    }

}

enter image description here

Консольді қараңыз. Үшінші жолда, мен бағдарламаны «Жалғастырғыңыз келе ме (Y/N)» белгісіне дейін басып шығарады деп күтемін, бірақ ол сондай-ақ «Қате енгізуді» басып шығарады. Жалғастырғыңыз келе ме (Y/N) '. Бұл мәселені қалай шешуге болады?

0
Жазбалар үшін continue және break дегендерді алып тастаңыз! ГОСО-ның бұл java баламасы ешқашан қажет емес
қосылды автор James Webster, көзі
NCode Мен кодты жаман деп санаймын, себебі мен тек бір апта бұрын Java-ге оқуға кірдім!
қосылды автор schizoid322, көзі
Сіздің java өте жаман стиль бар. Тегтер мен секірулерді қолдануға болмайды, олар кодты оқылмайды. Сіз кодтау конвенцияларын оқып шығуыңыз керек: oracle.com/technetwork/java/codeconv-138413 .html
қосылды автор NCode, көзі

2 жауаптар

nextInt және nextDouble әрекетін жасаған кезде, ол жолдың (бос) қалған бөлігін тазаламайды.

Осы мәндерді оқыған соң, жолдың қалған бөлігін тазарту үшін nextLine деп атауыңыз керек.

1
қосылды
System.out.printf("%.1f raised to the power of %d is %.4f. Do you want to continue?(Y/N) \n", x, n, prod);
s = input.next();

Бұл мәселеңізді шешеді, сонымен қатар этикеткалар пайдаланылмайды.

Java Label мәлімдемелерін пайдаланбауым керек пе?

Бұл кодты ұстап алатын адамдар сізді табады.

0
қосылды