Почему меняется поведение оператора switch
при различных способах инициализации управляющей переменной?
В первом случае, когда переменной сразу присваивается значение - char a = '1';
- все работает как надо.
А во втором, когда значение получается через - char a = (char) br.read();
- выполнение case
'ов начинается со второго метода, т.е. я не могу указать путь к файлу( первый метод как-бы пропускается). В обоих случаях тип переменной char и выбор кейсов происходит правильно. В чем может быть причина?
package task5;
import java.io.*;
public class Main {
private String pathToFile;
private String dataToWrite;
private void getFilePath(BufferedReader bufferedReader) {
try {
pathToFile = bufferedReader.readLine();
} catch (IOException e) {
System.out.println("getFilePath Error " + e);
}
}
private void getDataToWrite(BufferedReader bufferedReader) {
try {
dataToWrite = bufferedReader.readLine();
}catch (IOException e) {
System.out.println("getDataToWrite Error " + e);
}
}
private void writeToFile(String path, String data) {
try (FileWriter fw = new FileWriter(path)) {
fw.write(data);
fw.flush();
} catch (IOException e) {
System.out.println("writeToFile Error " + e);
}
}
private void readFromFile() {
try (FileReader fw = new FileReader(pathToFile)) {
int c;
StringBuilder res = new StringBuilder();
do {
c = fw.read();
res.append((char) c);
} while (c != -1);
System.out.println(res);
} catch (IOException e) {
System.out.println("FileReader Error " + e);
}
}
public static void main(String[] args) throws IOException {
String menu = "Выберите необходимое действие: \n" +
"1 - записать файл; \n" +
"2 - прочитать файл; \n";
System.out.println(menu);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Выберите вариант.");
Main m = new Main();
//char a = '1'; все работает
char a = (char) br.read(); //пропускается первый метод
switch (a) {
case '1':
System.out.println("Введите путь к файлу.");
m.getFilePath(br);
System.out.println(m.pathToFile);
System.out.println("Введите данные для записи.");
m.getDataToWrite(br);
System.out.println(m.dataToWrite);
m.writeToFile(m.pathToFile, m.dataToWrite);
break;
case '2':
System.out.println("Введите путь к файлу.");
m.getFilePath(br);
System.out.println(m.pathToFile);
m.readFromFile();
break;
}
}
}
char a = br.readLine().charAt(0);
read() вычитывает только один символ, в данном случае '1'. В остатке остается еще перенос строки. И когда вызывается pathToFile = bufferedReader.readLine(), то проверяется осталось ли что-то в остатке если да, то выводим иначе ждем ввода.
Попробуйте
String a = br.readLine();
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Вот пример того, что я имею ввиду:
Я прочел этот туторчик и тоже решил сделать авторизацию через гугл и файсбук в своем тестовом приложенииЯ абсолютно се сделал как в гайде
У нас есть список объектов доменной области (Person)У объекта Person есть 3 поля: id, имя, фамилия