Java помощь относительно циклов

1

Я в основном новичок в этом программировании. Есть часть кода, который я не мог понять и не знаю, как это сделать. Наверное, что наш инструктор не обсуждал. Я хочу, чтобы когда я вводил "Y", он повторил всю программу. Если я наберу "N", он выйдет. Вот код

import java.io.*;
import javax.swing.JOptionPane;

public class Doge {

    public static void main(String[] args) 
    {
        int start = 0;
        int end = 0;
        int step = 0;
        String input = "";
        BufferedReader in = new BufferedReader (
                new InputStreamReader (System.in));

        try 
        {
            System.out.println("Input starting number: ");
            input = in.readLine();
            start = Integer.parseInt(input);

            System.out.println("Input ending number: ");
            input = in.readLine();
            end = Integer.parseInt(input);

            System.out.println("Input step number: ");
            input = in.readLine();
            step = Integer.parseInt(input);

        }
        catch (IOException e)
        {
            System.out.println("Error");
        }

        System.out.println("");
        if (start>=end)
        {
            System.out.println("Starting number should be lesser than the ending number.");
        }
        while (start<=end)
        {
            System.out.println(start);
            start = start+step;
        }

        String result = "";
        char y = 'Y';
        char n = 'N';

        BufferedReader it = new BufferedReader (
                new InputStreamReader(System.in));
        try 
        {
            System.out.print("Do you want to retry (Y/N)? ");
            result = it.readLine();
        }
        catch(IOException e)
        {
            System.out.println("Error");
        }
        start = 0;
        end = 0;
        step = 0;
        input = "";
        BufferedReader in2 = new BufferedReader (
                new InputStreamReader (System.in));
        while ("y".equals(result))
        {
            try 
            {
                System.out.println("Input starting number: ");
                input = in2.readLine();
                start = Integer.parseInt(input);

                System.out.println("Input ending number: ");
                input = in2.readLine();
                end = Integer.parseInt(input);

                System.out.println("Input step number: ");
                input = in2.readLine();
                step = Integer.parseInt(input);
            }
            catch (IOException e)
            {
                System.out.println("Error");
            }

            System.out.println("");

            while (start<=end)
            {
                System.out.println(start);
                start = start+step;
            }
        }

        if ("n".equals(result))
            System.exit(0);
    }
}

Я совершенно смущен. Я думал о написании одних и тех же кодов, но строки ввода начального номера линии после размещения значения для номера шага.

Теги:
loops
while-loop
try-catch

1 ответ

1
Лучший ответ

Поймите do..while цикл в Java... здесь

Проблемы, которые я нашел в вашем коде

  1. BufferedReader не используется повторно
  2. Результат повторной попытки проверяет только один раз, но не каждый раз, когда он завершает один цикл процесса
  3. Строка сравнивается с "y", но не char y = 'Y'; вы определили. char y = 'Y'; должен быть String y = "Y"; (Сравнение с .equals() чувствительно к регистру. Поэтому, если вы хотите включить "y" в свое рассмотрение, вы можете использовать .equalsIgnoreCase()
  4. {и} недостаточно хорошо сочетается для отображения оператора в той же области (легкость чтения)

Я переписываю ваш код, надеюсь, вы сможете лучше понять

import java.io.*;
import javax.swing.JOptionPane;

public class Doge {

    public static void main(String[] args) 
    {
        int start = 0;
        int end = 0;
        int step = 0;
        String input = "";
        String result = "";
        boolean invalidInput = false;
        //String y = "Y";
        //String n = "N";

        //reuse same BufferedReader
        BufferedReader in2 = new BufferedReader (
                new InputStreamReader (System.in));

        //use do while to have statement run once then only check retry 
        do
        {
            try 
            {
                do
                {
                    System.out.println("Input starting number: ");
                    input = in2.readLine();
                    start = Integer.parseInt(input);

                    System.out.println("Input ending number: ");
                    input = in2.readLine();
                    end = Integer.parseInt(input);

                    if (start >= end)
                    {
                        System.out.println("Starting number should be lesser than the ending number.");
                        invalidInput = true;
                    }
                    else
                        invalidInput = false;
                } while (invalidInput);  //loop as long as the start >= end

                System.out.println("Input step number: ");
                input = in2.readLine();
                step = Integer.parseInt(input);
            }
            catch (IOException e)
            {
                System.out.println("Error");
            }

            System.out.println("");

            while (start<=end)
            {
                System.out.println(start);
                start = start+step;
            }

            try 
            {
                System.out.print("Do you want to retry (Y/N)? ");
                result = in2.readLine();
                //it will exit if answer is "N" or "n"
                //check whether result is String n (ignore case)
                //if (n.equalsIgnoreCase(result))
                //only accept "n"
                if ("n".equals(result))
                    System.exit(0);
            }
            catch(IOException e)
            {
                System.out.println("Error");
            }
        //} while (y.equalsIgnoreCase(result)); //loop if "y" or "Y"
        } while ("y".equals(result));

        //if here have other process, then your result that is neither 'Y' nor 'N' will run here    
    }
}

После запуска я знаю только .equals() и .equalsIgnoreCase() может использоваться только для String но не char

  • 0
    Приятно. Так что пришлось использовать цикл do while. Спасибо! : D
  • 0
    На самом деле я не программист Java, но я стараюсь изо всех сил :-)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню