Gdybyś miał jakoś konsekwentnie sformatowany kod, jak na przykład poniżej
import java.io.*;
class Main
{
public static void main(String[] args) throws IOException
{
BufferedReader wej =
new BufferedReader(new InputStreamReader(System.in));
do
{
String s;
int nrmiesiaca;
System.out.println("Podaj nr miesiąca:");
s = wej.readLine();
nrmiesiaca = Integer.parseInt(s);
}
while((nrmiesiaca < 1) || (nrmiesiaca > 12));
}
}
...to dość łatwo znalazłbyś błąd ponieważ zasięg zmiennej nie może wyjść poza blok - a tam ją właśnie używałeś. W ten sposób deklaracja zmiennej byłaby widoczna jako "bardziej wcięta" niż w błędnych miejscach jej użycia.
Gdybyś używał jeszcze jakiegoś porządnego IDE, typu netbeans lub eclipse, to zamiast tracić godzinę na męczeniu oczu zobaczyłbyś i poprawiłbyś błąd w sekundy.
U mnie nrmiesiąca został podkreślony na szaro mówiąc, że zmienna ta nie jest nigdy używana, a "while((nrmiesiaca < 1) || (nrmiesiaca > 12));" na czerwono, pokazując, że nrmiesiaca nie została znaleziona.
Tak na marginesie jest w tym kodzie jeszcze inny błąd. Przecież Integer.parseInt(s) wcale nie musi się udać. Ba, nawet wej.readLine() nie musi być udane. A tym samym zmiennej w ogóle nie musi być nadana jakakolwiek wartość. Wtedy wyskoczy wyjątek wykonania, a całe Twoje zabezpieczenie stanie się i tak bezwartościowe.
Poniżej masz pętlę, która jest odporna, i na błąd wejścia i na błędny format tego wejścia. W razie jakiegokolwiek błędu wraca na początek pętli. Równie dobrze zamiast continue; można użyć nadania zmiennej nrmiesiąca wartości poza zakresem 1..12. Warto też pamiętać, żeby dla własnej oszczędności czasu wpatrywania się w ekran nadawać zmiennym początkowe wartości - o ile to możliwe zawsze wartość nieprawidłową, która zostanie szybko wykryta.
import java.io.*;
class Main
{
public static void main(String[] args)
{
BufferedReader wej =
new BufferedReader(new InputStreamReader(System.in));
int nrmiesiaca = 0;
do
{
System.out.println("Podaj nr miesiąca:");
try { nrmiesiaca = Integer.parseInt(wej.readLine()); }
//Dwa wyjątki na raz: IOException i NumberFormatException
catch(Exception ex) { continue; }
}
while((nrmiesiaca < 1) || (nrmiesiaca > 12));
}
}