Как избавиться от бага дублирования символа при вводе?

package Convert;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class mainConvert {

    public static void main(String[] args) throws IOException {
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
            System.out.println("write \"M\" to convert mass,\nwrite \"D\" to convert distance");
            @SuppressWarnings("unused")
            String line;

            while ((line = reader.readLine()).equalsIgnoreCase("D")) {
                try {
                    System.out.println("write \"F\" to convert foots,\nwrite \"M\" to convert metres");
                    if ((line = reader.readLine()).equalsIgnoreCase("F")) {
                        System.out.println("write the number");
                        int num;
                        num = Integer.parseInt(reader.readLine());
                        ConvertDistanceFrom.Foot(num);
                    } else if ((line = reader.readLine()).equalsIgnoreCase("M")) {
                        System.out.println("write the number");
                        int num;
                        num = Integer.parseInt(reader.readLine());
                        ConvertDistanceFrom.Metr(num);
                    } else {
                        System.out.println("syntax error");
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            while ((line = reader.readLine()).equalsIgnoreCase("M")) {
                try {
                    System.out.println("write \"Kg\" to convert kilograms,\nwrite \"K\" to convert carats");
                    if ((line = reader.readLine()).equalsIgnoreCase("Kg")) {
                        System.out.println("write the number");
                        int num;
                        num = Integer.parseInt(reader.readLine());
                        ConvertMassFrom.Kg(num);
                    } else if ((line = reader.readLine()).equalsIgnoreCase("K")) {
                        System.out.println("write the number");
                        int num;
                        num = Integer.parseInt(reader.readLine());
                        ConvertMassFrom.Karat(num);
                    } else {
                        System.out.println("syntax error");
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class ConvertMassFrom {

    static void Kg(int kg) {
        double g, f, k;
        g = kg * 1000;
        f = kg * 2.2046226218;
        k = kg * 5000;
        System.out.println(" килограммы: " + kg + " \n граммы: " + g 
                + " \n фунты: " + f + " \n караты: " + k);
    }
    static void Karat(int k) {
        double f, g, kg;
        kg = k * 0.0002;
        g = k * 0.2;
        f = k * 0.0004409245;
        System.out.println(" караты: " + k + " \n килограммы: " + kg 
                + " \n граммы: " + g + " \n фунты: " + f);
    }
}

class ConvertDistanceFrom {

    static void Foot(int f) {
        double j, mi, m;
        j = f * 0.3333333333;
        mi = f * 0.0001893939;
        m = f * 0.3048;
        System.out.println(" футы: " + f + " \n ярды: " + (float) j
                + " \n мили: " + (float) mi + " \n метры: " + m);
    }
    static void Metr(int m) {
        float mi, j, f;
        mi = m * 0.0006213712f;
        j = m * 1.0936132983f;
        f = m * 3.280839895f;
        System.out.println(" метры: " + m + " \n мили: " + mi 
                + " \n ярды: " + j + " \n футы: " + f);
    }
}

Ответы (1 шт):

Автор решения: fox
package Convert;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class mainConvert {

    public static void main(String[] args) throws IOException {
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
            System.out.println("write \"M\" to convert mass,\nwrite \"D\" to convert distance");
            String line;
            line = reader.readLine();
            if (line.equalsIgnoreCase("D")) {
                try {
                    System.out.println("write \"F\" to convert foots,\nwrite \"M\" to convert metres");
                    line = reader.readLine();
                    if (line.equalsIgnoreCase("F")) {
                        System.out.println("write the number");
                        int num;
                        num = Integer.parseInt(reader.readLine());
                        ConvertDistanceFrom.Foot(num);
                    } else if (line.equalsIgnoreCase("M")) {
                        System.out.println("write the number");
                        int num;
                        num = Integer.parseInt(reader.readLine());
                        ConvertDistanceFrom.Metr(num);
                    } else {
                        System.out.println("syntax error");
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }

            else if (line.equalsIgnoreCase("M")) {
                try {
                    System.out.println("write \"Kg\" to convert kilograms,\nwrite \"K\" to convert carats");
                    line = reader.readLine();
                    if (line.equalsIgnoreCase("Kg")) {
                        System.out.println("write the number");
                        int num;
                        num = Integer.parseInt(reader.readLine());
                        ConvertMassFrom.Kg(num);
                    } else if (line.equalsIgnoreCase("K")) {
                        System.out.println("write the number");
                        int num;
                        num = Integer.parseInt(reader.readLine());
                        ConvertMassFrom.Karat(num);
                    } else {
                        System.out.println("syntax error");
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

/всего то: нужно было воспользоваться переменной line, вместо постоянного вызова метода/ !!!

→ Ссылка