Member 13689608 Ответов: 3

Оператор while не работает в этом коде?


То, что следует за s, - это мой код. Я не понимаю, почему программа заканчивается, не спрашивая ввода пользователя, который определяет, продолжает ли программа работать или нет.
Он должен ждать ввода, не так ли? Почему он завершается, не дожидаясь ввода?



package com.company;
import java.util.Scanner;

public class PP1CourseWork2 {
    static int dieRoll() {
        int roll1 = (int) ((Math.random() * 1000 % 6 + 1));
        int roll2 = (int) ((Math.random() * 1000 % 6 + 1));
        int roll3 = (int) ((Math.random() * 1000 % 6 + 1));
        int tot = roll1 + roll2 + roll3;
        return tot;
    }
    public static void main(String[] args){
        System.out.println("Enter Level: ");
        Scanner sc = new Scanner(System.in);
        int Level = sc.nextInt();
        String choice = null;
        int Str = dieRoll();
        int Dex =  dieRoll();
        int Con = dieRoll();
        int Int = dieRoll();
        int Wis = dieRoll();
        int Cha = dieRoll();

        do{
            if (Str == 10) {
                System.out.println("Str: " + "[" + Str + "]" + "[0]");


            } else if (Str > 10) {
                int bonus = 0;

                for (int i = 11; i < Str + 1; i++) {
                    if (i % 2 == 0) {
                        bonus = bonus + 1;
                    }
                }
                System.out.println("Str: " + "[" + Str + "]" + "[+" + bonus + "]");
            } else {
                int bonus = 0;
                for (int i = Str; i < 10; i++) {
                    if (!(i % 2 == 0)) {
                        bonus = bonus + 1;
                    }
                }
                System.out.println("Str: " + "[" + Str + "]" + "[-" + bonus + "]");
            }
            if (Dex == 10) {
                System.out.println("Dex: " + "[" + Dex + "]" + "[0]");


            } else if (Dex > 10) {
                int bonus = 0;

                for (int i = 11; i < Dex + 1; i++) {
                    if (i % 2 == 0) {
                        bonus = bonus + 1;
                    }
                }
                System.out.println("Dex: " + "[" + Dex + "]" + "[+" + bonus + "]");
            } else {
                int bonus = 0;
                for (int i = Dex; i < 10; i++) {
                    if (!(i % 2 == 0)) {
                        bonus = bonus + 1;
                    }
                }
                System.out.println("Dex: " + "[" + Dex + "]" + "[-" + bonus + "]");
            }
            if (Con == 10) {
                System.out.println("Con: " + "[" + Con + "]" + "[0]");


            } else if (Con > 10) {
                int bonus = 0;

                for (int i = 11; i < Con + 1; i++) {
                    if (i % 2 == 0) {
                        bonus = bonus + 1;
                    }
                }
                System.out.println("Con: " + "[" + Con + "]" + "[+" + bonus + "]");
            } else {
                int bonus = 0;
                for (int i = Con; i < 10; i++) {
                    if (!(i % 2 == 0)) {
                        bonus = bonus + 1;
                    }
                }
                System.out.println("Con: " + "[" + Con + "]" + "[-" + bonus + "]");
            }
            if (Int == 10) {
                System.out.println("Int: " + "[" + Int + "]" + "[0]");


            } else if (Int > 10) {
                int bonus = 0;

                for (int i = 11; i < Int + 1; i++) {
                    if (i % 2 == 0) {
                        bonus = bonus + 1;
                    }
                }
                System.out.println("Int: " + "[" + Int + "]" + "[+" + bonus + "]");
            } else {
                int bonus = 0;
                for (int i = Int; i < 10; i++) {
                    if (!(i % 2 == 0)) {
                        bonus = bonus + 1;
                    }
                }
                System.out.println("Int: " + "[" + Int + "]" + "[-" + bonus + "]");
            }
            if (Wis == 10) {
                System.out.println("Wis: " + "[" + Wis + "]" + "[0]");


            } else if (Wis > 10) {
                int bonus = 0;

                for (int i = 11; i < Wis + 1; i++) {
                    if (i % 2 == 0) {
                        bonus = bonus + 1;
                    }
                }
                System.out.println("Wis: " + "[" + Wis + "]" + "[+" + bonus + "]");
            } else {
                int bonus = 0;
                for (int i = Wis; i < 10; i++) {
                    if (!(i % 2 == 0)) {
                        bonus = bonus + 1;
                    }
                }
                System.out.println("Wis: " + "[" + Wis + "]" + "[-" + bonus + "]");
            }
            if (Cha == 10) {
                System.out.println("Cha: " + "[" + Cha + "]" + "[0]");


            } else if (Cha > 10) {
                int bonus = 0;

                for (int i = 11; i < Cha + 1; i++) {
                    if (i % 2 == 0) {
                        bonus = bonus + 1;
                    }
                }
                System.out.println("Cha: " + "[" + Cha + "]" + "[+" + bonus + "]");
            } else {
                int bonus = 0;
                for (int i = Cha; i < 10; i++) {
                    if (!(i % 2 == 0)) {
                        bonus = bonus + 1;
                    }
                }
                System.out.println("Cha: " + "[" + Cha + "]" + "[-" + bonus + "]");
            }

            choice= sc.nextLine();
            System.out.println("Type r if you want to re-roll or any other Character if you want to Continue: ");


        } while(choice.equals("r"));

    }
}


Что я уже пробовал:

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

3 Ответов

Рейтинг:
20

CPallini

Изменение от

Цитата:
выбор= СК.строки();
System.out.println("введите r, Если вы хотите повторить бросок или любой другой символ, если вы хотите продолжить: ");
к
System.out.println("Type r if you want to re-roll or any other Character if you want to Continue: ");
choice= sc.next();


Member 13689608

никакое изменение. спасибо, что попробовали Тхо!

CPallini

Это работает на меня. :-)

Рейтинг:
1

Member 13691612

Привет я не знаю актуален ли этот вопрос больше я пытался найти когда его задали но мне удалось исправить его таким образом

используйте do -while(который у вас уже есть). Проблема с вашим заключается в том, как вы принимаете ввод с клавиатуры.вы не можете принять это таким образом, из того, что я знаю.Использовать команду

n= sc.next().charAt(0);


это принимает ввод с клавиатуры с помощью .charAt() n-это значение, которое я назначил для повторной прокатки.0-это первое значение (как в нумерации java первая буква равна 0 и так далее)

while(n=='n');

используйте это как формат while, я не хочу публиковать код здесь, так как я также делаю что-то с ним, если вы остро нуждаетесь, пришлите мне электронное письмо на
yasanthsera@gmail.com


phil.o

Вы, конечно, не хотите размещать свой адрес электронной почты на общедоступном форуме, если только вы не готовы быть перегружены огромным количеством спам-сообщений.

Рейтинг:
0

phil.o

Вы должны поставить точку останова в начале вашего основного метода и начать сеанс отладки. Затем выполните построчно и выясните, почему вы получаете этот результат.

Кроме того, вы также должны рефакторинговать свой основной метод и избавиться от этого спагетти-кода :)

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

int getBonus(int abilityValue) {
   return (abilityValue / 2) - 5;
}
Это позволит вам писать
bonus = getBonus(Str);
вместо того чтобы использовать цикл для того, что требует в основном нескольких основных арифметических операций.

Любезно.


Member 13689608

Спасибо. Ваш комментарий будет оценен по достоинству. Я новичок АФ, так что я действительно не понял ничего из того, что ты сказал, Лол! Но я разберусь с этим. Немного погуглить-это долгий путь, не так ли

EDIT** понял проблему! По какой-то причине мне пришлось добавить sc.next(); а не sc.nextLine();