Zamknięcie Scannera

0

Witajcie,

Uczę się dopiero, czy jest możliwość zamknięcia tak zagnieżdżonego Scannera w bloki try/catch lub w pętli do/while albo w inny sposób?
'''java
public static void main(String args[]) {

	System.out.println("Wpisz liczbe a");
	int a = new Scanner(System.in).nextInt();
	System.out.println("Wpisz liczbe b");
	int b = new Scanner(System.in).nextInt();
	System.out.println("Wpisz znak działania: + - * /");
	String c = new Scanner(System.in).next();		
	switch(c) {
	case "+":
		System.out.println(a+b);
		break;
	case "-":
		System.out.println(a-b);
		break;
	case "*":
		System.out.println(a*b);
		break;
	default:
		System.out.println(a/b);
	}
	}		
	
}

'''

0

Teoretycznie można, ale jak się uda to zamkniesz też standardowe wejście. Po co chcesz zamykać ten Scanner?

0

Po pierwsze w Eclipsie nie ładnie wygląda mi żółty znaczek:)
Po drugie robiąc zadania na SPOJ-u to do prawidłowego przesłania rozwiązania potrzeba scanner zamykać.
Natomiast czy to wygląda czytelnie dla doświadczonego programisty?
Czy jest funkcjonalny scanner w tej postaci?
Czy przy bardziej rozbudowanych zadaniach nie będzie to sprawiało problemu?

1
Jezyk833 napisał(a):

Po pierwsze w Eclipsie nie ładnie wygląda mi żółty znaczek:)

Czasem IDE podpowiadają bardzo głupie rzeczy (np żeby usunąć klamerki z ifa który ma jedną linijkę). Nie należy ich brać bezkrytycznie do siebie. Ja bym taką inspekcję wyłączył.

Po drugie robiąc zadania na SPOJ-u to do prawidłowego przesłania rozwiązania potrzeba scanner zamykać.

Że co? Ktoś to sprawdza? Poza tym, jak zamkniesz aplikację to wszystkie zasoby i tak się zwolnią? Z zewnątrz, to jest nie rozróżnialne czy zamkniesz ten Scanner w ostatniej linijce czy nie. Jedyne co może to sprawdzić to człowiek/bot który czyta kod źródłowy.

Natomiast czy to wygląda czytelnie dla doświadczonego programisty?

Tak na prawdę nie da się zrobić czegoś takiego jak zamknięcie Scannera. Najwyżej możesz zamknąć stream który jest pod spodem (w Twojej sytuacji System.in). Wejście standardowe jest przydzielane dla każdego programu w komputerze, i takie zamykanie go wydaje się najmniej dziwne, najbardziej niebezpieczne. Po co program niby miałby to robić?

Czy jest funkcjonalny scanner w tej postaci?

Scanner to pudełko na leżący pod spodem InputStream.

Czy przy bardziej rozbudowanych zadaniach nie będzie to sprawiało problemu?

Tryliardy programów działają bez zamykania wejścia standardowego, i nic się nie dzieje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1