Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2015, 12:18   #1
BonBonita
 
Регистрация: 20.02.2015
Сообщений: 8
По умолчанию Капризы ввода

Не могу разобраться, почему у меня этот код работает (ввожу два числа, и проверяю их на правильность ввода):

Код:
import java.util.Scanner;

public class Circles2Variant2
{
	public static void main(String[] args) 
	{
		double a,b;
		
		Scanner sc=new Scanner(System.in);

		boolean flag=false;
		do
		{
			System.out.println("Введите a");
			try
			{
				a=sc.nextDouble();
				System.out.println("Вы ввели a= "+a);
				flag=true;
			}catch(Exception e)
			{
				System.out.println("Error. Try else:");
				sc.next();
			}
		}while(flag==false);
		
		flag=false;
		do
		{
			System.out.println("Введите b");
			try
			{
				b=sc.nextDouble();
				System.out.println("Вы ввели b= "+b);
				flag=true;
			}catch(Exception e)
			{
				System.out.println("Error. Try else:");
				sc.next();
			}
		}while(flag==false);
		
		sc.close();
	}
}
А этот, повторяющий предыдущий, но вынесенный в отдельную функцию, второе число не вводит.
Код:
import java.util.Scanner;

public class Circles3Variant2 
{
	static double ConsolInput()
	{
		double inputData = 0 ;

		Scanner sc=new Scanner(System.in);

		boolean flag=false;
		do
		{
			try
			{
				inputData=sc.nextDouble();
				System.out.println("Вы ввели  "+inputData);
				flag=true;
			}catch(Exception e)
			{
				System.out.println("Ошибка ввода. Повторите:");
				sc.next();
			}
		}while(flag==false);
	
		sc.close();
		return inputData;
	}

	public static void main(String[] args) 
	{
		double a,b;
		
		System.out.println("Введите а");
		a=ConsolInput();
		System.out.println("a="+a);
		
		System.out.println("Введите b");
		b=ConsolInput();
		System.out.println("b="+b);	
	}

}
Во время выполнения появляется ошибка:
Цитата:
Введите а
12,3
Вы ввели 12.3
a=12.3
Введите b
Ошибка ввода. Повторите:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at Circles3Variant2.ConsolInput(Circle s3Variant2.java:22)
at Circles3Variant2.main(Circles3Varia nt2.java:39)
Во всём "виноват" Enter? Если да, то как с этим бороться?
BonBonita вне форума Ответить с цитированием
Старый 20.02.2015, 13:18   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Читайте строку, триммруйте её,пробуйте преобразовать её в Double, если ок, то возвращайте double.
Человек_Борща вне форума Ответить с цитированием
Старый 21.02.2015, 12:38   #3
BonBonita
 
Регистрация: 20.02.2015
Сообщений: 8
По умолчанию

Спасибо за подсказку на вопрос "как с этим бороться?".
А вот ответ на первый вопрос "почему у меня этот код работает..а этот, повторяющий предыдущий, но вынесенный в отдельную функцию не работает " так и не получила. А именно этот вопрос меня больше интересует. Какого-то нюанса я не понимаю, и вот это меня немного напрягает... Я понимаю, что в чужих каракулях разбираться не интересно, но ведь этот код - почти примитив, поэтому не должен занять много времени, please.

------------------------------
А, и главное! Человек_Борща - С днём рождения!

Последний раз редактировалось BonBonita; 21.02.2015 в 12:46.
BonBonita вне форума Ответить с цитированием
Старый 21.02.2015, 13:38   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

scanner.close() не надо, он вроде и поток ввода закрывает.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формы ввода _Kitten_ Microsoft Office Access 2 29.04.2013 12:04
Корректность ввода на СИ glebast Помощь студентам 4 14.09.2012 22:42
Написать рекурсивную процедуру для ввода с клавиатуры последовательности чи-сел (конец ввода – 0) и вывода её на экран в обратном netiv Паскаль, Turbo Pascal, PascalABC.NET 1 17.02.2012 18:14
Форматирование ввода в колонку dataGridView и проверка правильности ввода tumanovalex C# (си шарп) 1 31.05.2011 19:56
Как сделать запрет ввода букв в поле для ввода input zvezda_t PHP 1 27.12.2009 22:02