Java не работает try catch из-за scanner [закрыт]

119
10 декабря 2019, 15:20
Closed. This question is off-topic. It is not currently accepting answers.

Want to improve this question? Update the question so it's on-topic for Stack Overflow на русском.

Closed 9 месяцев назад.

Не могу исправить ошибку из-за сканнера в методе "nacistVolbu()", но она работает правильно, если не использовать метод "upravitZaznam()". Подскажите пожалуйста почему.

public class alp_taskC {
private static final Scanner sc = new Scanner(System.in);
public static void main(String[] args) throws IOException {
    // hlavni ridici smycka programu
    boolean konecProgramu = false;
    while (!konecProgramu) {
        // vypsat menu
        vypisHlavniMenuProgramu();
        // nacist volbu uzivatel
        int volbaUzivatele = nacistVolbu();
        // provest akci pozadovanou uzivatelem
        switch (volbaUzivatele) {
            case 0:
                konecProgramu = true;
                break;
            case 2:
                upravitZaznam();
                break;
            default:
                System.out.println("Zadana neplatna volba");
        }
    }
}
private static void vypisHlavniMenuProgramu() {
    System.out.println("");
    System.out.println("Hlavni menu programu");
    //System.out.println("1. Pridat zaznam zaku");
    System.out.println("2. Upravit nektere casti zaznamu zaku");  //исправить список в файле
    //System.out.println("3. Odstranit nektere ze zaznamu zaku");
    //System.out.println("4. Zobrazit seznam");
    //System.out.println("5. Vytvorit novou sadu zaznamu");
    System.out.println("0. Konec programu");
}
private static int nacistVolbu() {
    int volba = -1;
    System.out.print("Zadej zvolenou polozku menu: ");
    try {
        volba = sc.nextInt();
        sc.nextLine();
    } catch (InputMismatchException e) {
        // neplatna volba
        volba = -1;
    }
//        finally {
//                sc.nextLine();
//        }
    return volba;
}
//    private static ArrayList<String> lidi = new ArrayList<String>();
//    private static ArrayList<Integer> znamka = new ArrayList<Integer>();

private static void upravitZaznam() {
    Scanner scan = new Scanner(System.in);
    try {
        System.out.println("Jaky radek chcete zmenit?");
        int radek = scan.nextInt() - 1;
        new alp_taskC().zmenitRadek("ibrayev/src/seznamZaku.txt", radek);
    } catch (InputMismatchException e) {
        System.out.println("Opraveno");
    }
    scan.close();
}
private void zmenitRadek(String file, int line) {
    Scanner scan = new Scanner(System.in);
    System.out.println("Zmenit na: ");
    String newLine = scan.nextLine();
    scan.close();
    BufferedReader br = null;
    try {
        br = new BufferedReader(new FileReader(file));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    String temp = "";
    String[] result = null;
    int pocetRadku = 0;
    try {
        int iter = 0;
        while ((temp = br.readLine()) != null) pocetRadku++;
        br = null;
        br = new BufferedReader(new FileReader(file));
        result = new String[pocetRadku];
        while ((temp = br.readLine()) != null) {
            if (iter != line) result[iter] = temp;
            else result[iter] = newLine;
            iter++;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        br.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        PrintWriter pw = new PrintWriter(new FileWriter(file));
        int i = 0;
        while (pocetRadku != 0) {
            pw.println(result[i]);
            i++;
            pocetRadku--;
        }
        pw.flush();
        pw.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}
Answer 1

В блоке finally читаете следующую строку с какой целью? Она всегда выполняется, даже если там ничего нет. Блок finally выполняется всегда независимо есть ошибка или нет.

Answer 2

Нашел ответ как исправить данную ошибку. Я соединил методы "upravitZaznam()" и "zmenitRadek()".

public static void upravitZaznam(){
    Scanner scan = new Scanner(System.in);
    System.out.println("Jaky radek chcete zmenit?");
    int radek = scan.nextInt() -1;
    System.out.println("Zmenit radek na: ");
    String newLine = scan.next();
    BufferedReader buffReader = null;
    try {
        buffReader = new BufferedReader(new FileReader("ibrayev/src/seznamZaku.txt"));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    String temp = "";
    String[] result = null;
    int howRows = 0;
    try {
        int iter = 0;
        while ((temp = buffReader.readLine()) != null) howRows++;
        buffReader = null;
        buffReader = new BufferedReader(new FileReader("ibrayev/src/seznamZaku.txt"));
        result = new String[howRows];
        while ((temp = buffReader.readLine()) != null) {
            if (iter != radek) result[iter] = temp;
            else result[iter] = newLine;
            iter++;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        buffReader.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        PrintWriter pw = new PrintWriter(new FileWriter("ibrayev/src/seznamZaku.txt"));
        int i = 0;
        while (howRows != 0) {
            pw.println(result[i]);
            i++;
            howRows--;
        }
        pw.flush();
        pw.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
 }
READ ALSO
WebResourceResponse

WebResourceResponse

не подскажите как в функции getWebResourceResponse получить доступ к POST Данным?

151
Ошибка при сборке Vue.js проекта

Ошибка при сборке Vue.js проекта

Добрый день подскажите пожалуйста пытаюсь собрать vuejs проект и при сборке выдаёт ошибку, откатывал проект до предыдущего состояния когда...

196
Vue 2 и яндекс карты с KML импортом

Vue 2 и яндекс карты с KML импортом

Попробовал модуль: https://githubcom/PNKBizz/vue-yandex-map, но он не поддерживает KML импорт, решил попробовать по примеру: https://tech

145