Почему мой код никогда не заканчивается?Я удалила для цикла - PullRequest
0 голосов
/ 24 марта 2019

Во время одного из прогонов моего кода он зашёл в бесконечный цикл. Я использую repl.it , поэтому, когда я нажимаю «Выполнить», ничего не появляется.

Раньше у меня был цикл for, но проблема сохраняется, несмотря на то, что я его удалил. До сих пор я взял ввод имени и создал переменные bo_b, fo_f и mo_m.

import java.util.Scanner;

public class Main {
    static String input;

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("What is your name? ");
        String input = keyboard.nextLine();
        input = input.toLowerCase();
        System.out.println("Input: " + input);
        String name = Song(input);
        System.out.println(name);
    }

    public static String Song(String str) {
        String bo_b = "";
        String fo_f = "";
        String mo_m = "";
        int a = 0;
        /* for (int i = 0; i < str.length(); i++) {
            a += i;
            i = 0;
            int i = 0; */
            System.out.println(str);
            System.out.println("a: " + a + "; i: " + i);
            if (!(Character.isLetter(str.charAt(i)))) {
                System.out.println("Only letters are alowed");
                System.exit(0);
            } else if (((str.substring(0, 1)).equals("a") || (str.substring(0, 1)).equals("e") || (str.substring(0, 1)).equals("i") || (str.substring(0, 1)).equals("o") || (str.substring(0, 1)).equals("u"))) {
                break;
            } else {
                str = str.substring(a + 1);
                System.out.println("AFTER: " + str);
                a -= 1;
            }
            bo_b = "Bo-B" + str;
            fo_f = "Fo-F" + str;
            mo_m = "Mo-M" + str;
            str = Character.toUpperCase(str.charAt(0)) + str.substring(1);
            String result = new String(str + ", " + str + " " + bo_b + ", " + "Bonana Fanna " + fo_f + ", " + "Fe fi "
                    + mo_m + ", " + str);
            return result;
        }
    }
}

Извините за изложение всего моего кода, поскольку я не знаю, откуда возникла ошибка.

Я ожидаю, что код проверит символы в начале строки. Обратите внимание, что я не закончил с этим проектом. Цель этого кода - взять ввод имени и вставить его в «Игру имени» (Бонана, Фанна и т. Д.) Ширли Эллис.

1 Ответ

0 голосов
/ 24 марта 2019
public class NameGame {

public static void main(String[] args) {
    Scanner keyboard = new Scanner(System.in);
    System.out.println("What is your name? ");
    String input = keyboard.nextLine();
    input = input.toLowerCase();
    System.out.println("Input: " + input);
    String name = Song(input);
    System.out.println(name);
}

static String Song(String str) {
    String bo_b = "";
    String fo_f = "";
    String mo_m = "";
    int a = 0;
    for(int i =0;i<str.length();i++) {
        a += i;
        System.out.println(str);
        System.out.println("a: " + a + "; i: " + i);
        if (!(Character.isLetter(str.charAt(i)))) {
            System.out.println("Only letters are allowed");
            System.exit(0);
        } else if ((str.substring(0, 1)).equals("a") ||
                (str.substring(0, 1)).equals("e") ||
                (str.substring(0, 1)).equals("i") ||
                (str.substring(0, 1)).equals("o") ||
                (str.substring(0, 1)).equals("u")) {
            break;
        } else{
            str = str.substring(a + 1);
            System.out.println("AFTER: " + str);
            a -= 1;
        }
        bo_b = "Bo-B" + str;
        fo_f = "Fo-F" + str;
        mo_m = "Mo-M" + str;
        str = Character.toUpperCase(str.charAt(0)) + str.substring(1);
    }
    return str + ", " + str + " " + bo_b + ", " + "Bonana Fanna " + fo_f + ", " + "Fe fi " + mo_m + ", " + str;
}

}

Одна вещь заключалась в том, что вы делали это внутри цикла for

i = 0;
int i = 0;

Это просто сбросило бы цикл обратно к i = 0, вызывая бесконечный цикл. Я изменил это. Измененный код работает. Однако я не уверен, чего вы пытаетесь достичь.

...