RSS 2.0 КПК
Конференция JavaTalks  :  Java форум  :  PHP форум  :  Реклама на форуме
JavaTalks - форум программистов
Java форум JavaTalks
форум программистов 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
 
переход в указанную часть кода

 
Начать новую тему   Ответить на тему    Список форумов Java форум JavaTalks -> Основы языка Java
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 или не-число? Smile
Код:
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 или не-число? Smile

Честно говоря, не понял о чем вы?

upd: нет, сорри, возможно понял, сейчас проверю.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
sabaka
Новичок


Зарегистрирован: 24.04.2010
Сообщения: 3
Откуда: Севастополь

СообщениеДобавлено: Апр 24, 2010 16:35    Заголовок сообщения: RE: переход в указанную часть кода Ответить с цитатой

SlKelevro, благодарю. То, что нужно Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
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) говорит о том, что не всё ок Wink . Во-вторых, выход из цикла с помощью exit-а значит что вся логика программы должна быть в этом цикле, что не есть гут. Т.к. нет смысла начинать с нуля если, к примеру, 3 из 5 этапов пройдено нормально и только на 4-ом произошла ошибка. Можно конечно заменить System.exit() на if ( что-то ) { break; } но это фактически приводит ваш вариант к моему..
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
1nqu1s1t0r
Новичок


Зарегистрирован: 12.04.2010
Сообщения: 144

СообщениеДобавлено: Апр 28, 2010 12:50    Заголовок сообщения: Re: RE: переход в указанную часть кода Ответить с цитатой

SlKelevro писал(а):

Во-первых, exit(1) говорит о том, что не всё ок Wink . Во-вторых, выход из цикла с помощью exit-а значит что вся логика программы должна быть в этом цикле, что не есть гут. Т.к. нет смысла начинать с нуля если, к примеру, 3 из 5 этапов пройдено нормально и только на 4-ом произошла ошибка. Можно конечно заменить System.exit() на if ( что-то ) { break; } но это фактически приводит ваш вариант к моему..


первое. согласен Laughing
второе. в данном случае оно так и есть - вся логика в одном блоке.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
SlKelevro
Новичок


Зарегистрирован: 24.03.2010
Сообщения: 155

СообщениеДобавлено: Апр 29, 2010 5:53    Заголовок сообщения: Re: RE: переход в указанную часть кода Ответить с цитатой

1nqu1s1t0r писал(а):
второе. в данном случае оно так и есть - вся логика в одном блоке.

Как сказал автор
sabaka писал(а):
Есть задача, есть её решение - это не столь важно. Сейчас делаю проверку вводимых с клавиатуры данных.

так что один из предложенных вариантов проверки ввода должен добавляться в готовую программу. Потому я и говорю что нельзя делать выход с помощью System.exit() Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
1nqu1s1t0r
Новичок


Зарегистрирован: 12.04.2010
Сообщения: 144

СообщениеДобавлено: Апр 29, 2010 7:57    Заголовок сообщения: Re: RE: переход в указанную часть кода Ответить с цитатой

SlKelevro писал(а):
Как сказал автор
sabaka писал(а):
Есть задача, есть её решение - это не столь важно. Сейчас делаю проверку вводимых с клавиатуры данных.

так что один из предложенных вариантов проверки ввода должен добавляться в готовую программу. Потому я и говорю что нельзя делать выход с помощью System.exit() Smile


не аргумент. автору необходимо:
Цитата:

Собственно что нужно: при выбросе исключения сейчас программа завершается. Хочется, что бы вместо завершения она давала еще попытку ввода правильных данных, т.е. хотелось бы что бы при прохождении неправильного условия, или при выбросе исключения данный кусок кода начинал выполняться заново.


не вижу причин не использовать System.exit. Если вам сильно не нравится System.exit - можно заменить его на break.

Я не говорю что ваш пример не правильный, я лишь предложил альтернативу. Так бы делал я.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
balamuti4
Новичок


Зарегистрирован: 30.04.2010
Сообщения: 27

СообщениеДобавлено: Апр 30, 2010 14:40    Заголовок сообщения: RE: переход в указанную часть кода Ответить с цитатой

А я бы попробовал использовать рекурсию. Запихал бы ввод в отдельный метод и гонял бы по кругуSmile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
SlKelevro
Новичок


Зарегистрирован: 24.03.2010
Сообщения: 155

СообщениеДобавлено: Апр 30, 2010 14:55    Заголовок сообщения: Re: RE: переход в указанную часть кода Ответить с цитатой

balamuti4 писал(а):
А я бы попробовал использовать рекурсию. Запихал бы ввод в отдельный метод и гонял бы по кругуSmile

Собственно, так OZKA и сделал, см. выше Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Java форум JavaTalks -> Основы языка Java Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Этот сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2011 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2011 phpBB Group


GetJava Download Button Rambler's Top100