| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
sabaka Новичок
Зарегистрирован: 24.04.2010 Сообщения: 3 Откуда: Севастополь
|
Добавлено: Апр 24, 2010 13:56 Заголовок сообщения: переход в указанную часть кода |
|
|
Доброго времени суток. Есть задача, есть её решение - это не столь важно. Сейчас делаю проверку вводимых с клавиатуры данных. Данные должны быть только числовыми.
Вот кусок кода:
| Код: |
System.out.print("Введите количество переменных функции: ");
line=conread.readLine();
try{
capper=Integer.parseInt(line);
if(capper<2){//проверка на количество переменных
System.out.println("Не может быть меньше 2-х переменных. Попробуйте еще раз.");
System.exit(0);
}
}catch(Exception e){
System.out.println("Введенные данные не верны.Попробуйте запустить программу еще раз");
System.exit(0);
} |
Собственно что нужно: при выбросе исключения сейчас программа завершается. Хочется, что бы вместо завершения она давала еще попытку ввода правильных данных, т.е. хотелось бы что бы при прохождении неправильного условия, или при выбросе исключения данный кусок кода начинал выполняться заново. С java знаком не так давно, прошу Вашей помощи. |
|
| Вернуться к началу |
|
 |
OZKA Новичок
Зарегистрирован: 04.03.2009 Сообщения: 103
|
Добавлено: Апр 24, 2010 14:36 Заголовок сообщения: RE: переход в указанную часть кода |
|
|
| Тот код что в try вынести в отдельный метод, в catch после сообщения о неверных данных(это исключение NumberFormatException), вместо System.exit снова вызывать тот самый метод. В самом методе предусмотреть: какие данные пользователь должен ввести, что бы программа завершила работу, например, проверять не ввел ли пользователь слово exit. |
|
| Вернуться к началу |
|
 |
SlKelevro Новичок
Зарегистрирован: 24.03.2010 Сообщения: 155
|
Добавлено: Апр 24, 2010 15:01 Заголовок сообщения: Re: RE: переход в указанную часть кода |
|
|
| OZKA писал(а): |
| в catch после сообщения о неверных данных(это исключение NumberFormatException), вместо System.exit снова вызывать тот самый метод |
А если юзер дважды введёт 0, 1 или не-число?
| Код: |
public static void main(String[] args) {
BufferedReader stdin = new BufferedReader(
new InputStreamReader(System.in)
);
String line;
int capper;
boolean notEntered = true;
while ( notEntered ) {
try {
System.out.print("Enter args count: ");
line = stdin.readLine();
capper = Integer.parseInt(line);
if (capper < 2) {
System.out.println("Args count must be >= 2");
} else {
notEntered = false;
}
} catch (NumberFormatException e) {
System.out.println("Not a number!");
} catch (IOException e) {
System.out.println("IOException!");
e.printStackTrace();
}
}
} |
Тоже, возможно, не лучший вариант, но хотя бы не пропустит дальше пока не введёшь то что надо |
|
| Вернуться к началу |
|
 |
OZKA Новичок
Зарегистрирован: 04.03.2009 Сообщения: 103
|
Добавлено: Апр 24, 2010 15:46 Заголовок сообщения: Re: RE: переход в указанную часть кода |
|
|
| SlKelevro писал(а): |
А если юзер дважды введёт 0, 1 или не-число?
|
Честно говоря, не понял о чем вы?
upd: нет, сорри, возможно понял, сейчас проверю. |
|
| Вернуться к началу |
|
 |
sabaka Новичок
Зарегистрирован: 24.04.2010 Сообщения: 3 Откуда: Севастополь
|
Добавлено: Апр 24, 2010 16:35 Заголовок сообщения: RE: переход в указанную часть кода |
|
|
SlKelevro, благодарю. То, что нужно  |
|
| Вернуться к началу |
|
 |
OZKA Новичок
Зарегистрирован: 04.03.2009 Сообщения: 103
|
Добавлено: Апр 24, 2010 16:36 Заголовок сообщения: RE: переход в указанную часть кода |
|
|
Прошу прощения, был невнимателен, вот мой вариант:
| Код: |
import java.util.InputMismatchException;
import java.util.Scanner;
public class DigitsEnter {
private int getNum() {
return getNum(false);
}
private int getNum(boolean isQtyEnter) {
Scanner in = new Scanner(System.in);
int ret = 0;
try {
ret = in.nextInt();
if (isQtyEnter && ret <= 0) {
/*Тут и ниже, по хорошему, нужен
свой тип исключения для этой ситуации*/
throw new Exception();
}
}
catch (InputMismatchException e) {
System.out.println("Требуется ввести число");
return getNum(isQtyEnter);
}
catch (Exception e){
/*Тут и выше, по хорошему, нужен
свой тип исключения для этой ситуации*/
System.out.println("Кол-во переменных не может быть равно " + ret);
return getNum(isQtyEnter);
}
return ret;
}
public void run() {
System.out.println("Введите кол-во переменных: ");
int qty = getNum(true);
int arguments[] = new int[qty];
for(int i = 1; i <= qty; i++) {
System.out.println("Введите аргумент №" + i);
arguments[i - 1] = getNum();
}
for(int i = 1; i <= arguments.length; i++) {
System.out.println("Aргумент №" + i + "-> " + arguments[i - 1]);
}
}
public static void main(String[] args) {
new DigitsEnter().run();
}
}
|
|
|
| Вернуться к началу |
|
 |
1nqu1s1t0r Новичок
Зарегистрирован: 12.04.2010 Сообщения: 144
|
Добавлено: Апр 28, 2010 10:19 Заголовок сообщения: RE: переход в указанную часть кода |
|
|
почему бы не так:
| Код: |
while(true){
try{
// Some actions
System.exit(1); // Everithing ok. Exit
}
catch (Exception e){
// processing of exception
continue;
}
}
|
|
|
| Вернуться к началу |
|
 |
SlKelevro Новичок
Зарегистрирован: 24.03.2010 Сообщения: 155
|
Добавлено: Апр 28, 2010 11:53 Заголовок сообщения: Re: RE: переход в указанную часть кода |
|
|
| 1nqu1s1t0r писал(а): |
почему бы не так:
| Код: |
while(true){
try{
// Some actions
System.exit(1); // Everithing ok. Exit
}
catch (Exception e){
// processing of exception
continue;
}
}
|
|
Во-первых, exit(1) говорит о том, что не всё ок . Во-вторых, выход из цикла с помощью exit-а значит что вся логика программы должна быть в этом цикле, что не есть гут. Т.к. нет смысла начинать с нуля если, к примеру, 3 из 5 этапов пройдено нормально и только на 4-ом произошла ошибка. Можно конечно заменить System.exit() на if ( что-то ) { break; } но это фактически приводит ваш вариант к моему.. |
|
| Вернуться к началу |
|
 |
1nqu1s1t0r Новичок
Зарегистрирован: 12.04.2010 Сообщения: 144
|
Добавлено: Апр 28, 2010 12:50 Заголовок сообщения: Re: RE: переход в указанную часть кода |
|
|
| SlKelevro писал(а): |
Во-первых, exit(1) говорит о том, что не всё ок . Во-вторых, выход из цикла с помощью exit-а значит что вся логика программы должна быть в этом цикле, что не есть гут. Т.к. нет смысла начинать с нуля если, к примеру, 3 из 5 этапов пройдено нормально и только на 4-ом произошла ошибка. Можно конечно заменить System.exit() на if ( что-то ) { break; } но это фактически приводит ваш вариант к моему.. |
первое. согласен
второе. в данном случае оно так и есть - вся логика в одном блоке. |
|
| Вернуться к началу |
|
 |
SlKelevro Новичок
Зарегистрирован: 24.03.2010 Сообщения: 155
|
Добавлено: Апр 29, 2010 5:53 Заголовок сообщения: Re: RE: переход в указанную часть кода |
|
|
| 1nqu1s1t0r писал(а): |
| второе. в данном случае оно так и есть - вся логика в одном блоке. |
Как сказал автор
| sabaka писал(а): |
| Есть задача, есть её решение - это не столь важно. Сейчас делаю проверку вводимых с клавиатуры данных. |
так что один из предложенных вариантов проверки ввода должен добавляться в готовую программу. Потому я и говорю что нельзя делать выход с помощью System.exit()  |
|
| Вернуться к началу |
|
 |
1nqu1s1t0r Новичок
Зарегистрирован: 12.04.2010 Сообщения: 144
|
Добавлено: Апр 29, 2010 7:57 Заголовок сообщения: Re: RE: переход в указанную часть кода |
|
|
| SlKelevro писал(а): |
Как сказал автор
| sabaka писал(а): |
| Есть задача, есть её решение - это не столь важно. Сейчас делаю проверку вводимых с клавиатуры данных. |
так что один из предложенных вариантов проверки ввода должен добавляться в готовую программу. Потому я и говорю что нельзя делать выход с помощью System.exit()  |
не аргумент. автору необходимо:
| Цитата: |
Собственно что нужно: при выбросе исключения сейчас программа завершается. Хочется, что бы вместо завершения она давала еще попытку ввода правильных данных, т.е. хотелось бы что бы при прохождении неправильного условия, или при выбросе исключения данный кусок кода начинал выполняться заново.
|
не вижу причин не использовать System.exit. Если вам сильно не нравится System.exit - можно заменить его на break.
Я не говорю что ваш пример не правильный, я лишь предложил альтернативу. Так бы делал я. |
|
| Вернуться к началу |
|
 |
balamuti4 Новичок
Зарегистрирован: 30.04.2010 Сообщения: 27
|
Добавлено: Апр 30, 2010 14:40 Заголовок сообщения: RE: переход в указанную часть кода |
|
|
А я бы попробовал использовать рекурсию. Запихал бы ввод в отдельный метод и гонял бы по кругу |
|
| Вернуться к началу |
|
 |
SlKelevro Новичок
Зарегистрирован: 24.03.2010 Сообщения: 155
|
Добавлено: Апр 30, 2010 14:55 Заголовок сообщения: Re: RE: переход в указанную часть кода |
|
|
| balamuti4 писал(а): |
А я бы попробовал использовать рекурсию. Запихал бы ввод в отдельный метод и гонял бы по кругу |
Собственно, так OZKA и сделал, см. выше  |
|
| Вернуться к началу |
|
 |
|