Hej,
mam pytanie. Dla wielu pewno okaże się banalne, ale kto nie pyta nie błądzi. Niestety w dostępnych materiałach w internecie nie znalazłem odpowiedzi. Tworzę program do logowania, i chciałbym w podanym haśle wychwycić cyfry oraz duże litery. Pomoże ktoś? Czy ma Java w swojej bibliotece metody którymi mógłbym się posłużyć?
Dzięki wielkie
Klasa Character
ma statyczne metody isDigit oraz isUpperCase. Można zrobić pętlę która sprawdzałaby każdy znak po kolei używając tych właśnie metod.
wyrażenie regularne
String Str = new String("abc");
string.matches("[a-z]");
problem polega na tym ,że muszę sprawdzić czy hasło podane ma przynajmniej dwie cyfry i conajmniej jedną dużą literę
Zrób licznik cyfr oraz boolean
dla dużej litery (true
gdy znaleziono w haśle dużą literę).
Po skończeniu pętli zwracasz true
jeżeli licznik jest równy lub większy niż 2 i gdy w haśle występuje duża litera, w przeciwnym razie - wiadomo - false
. Zamiast if
możesz zrobić tak:
return numberOfDigits >= 2 && hasUpperCase;
import java.util.*;
public class Logowanie {
public static void main(String[] args) {
Scanner haslo = new Scanner(System.in);
System.out.println("podaj hasło");
String noweHaslo = haslo.next();
try {
werfikacjaHasla(noweHaslo);
} catch (BladPierwszy bladPierwszy) {
} catch (BladDrugi bladDrugi) {
} catch (BladTrzeci bladTrzeci) {
}
}
public static void werfikacjaHasla(String noweHaslo) throws BladPierwszy, BladDrugi, BladTrzeci {
char duzaLitera;
char cyfra;
if (noweHaslo.length() < 9) {
throw new BladPierwszy();
}
for (int i = 0; i < noweHaslo.length(); i++) {
duzaLitera = noweHaslo.charAt(i);
cyfra = noweHaslo.charAt(i);
if (Character.isUpperCase(duzaLitera)) {
if (Character.isDigit(cyfra)) {
}
else throw new BladDrugi();
}
else throw new BladTrzeci();
}
}
}
napisałem to w ten sposób , ale niestety coś nie działa
Dlaczego logika twojego programu jest aż tak napakowana wyjątkami?:>
Ta konstrukcja:
if (Character.isUpperCase(duzaLitera)) {
if (Character.isDigit(cyfra)) {
}
else throw new BladDrugi();
}
else throw new BladTrzeci();
sprawiłaby (gdyby była poprawnie napisana) że pierwsza napotkana mała litera wyrzuciła by wyjątek BladTrzeci()
, a przecież za nią mogą być duże litery.
Zauważ że isDigit()
znajduje się w środku isUpperCase
- oznacza to że znak musiałby być jednocześnie dużą literą oraz cyfrą aby 2 if
się spełnił.
Zwróć uwagę że duzaLitera
oraz cyfra
są takie same - w takim wypadku wystarczy jedna zmienna. Nie widzę też potrzeby deklarowania jej poza pętlą.
Brakuje u Ciebie w kodzie zmiennych o których mówiłem wcześniej, a te są wymagane bo musisz najpierw sprawdzić wszystkie znaki w haśle, dopiero potem możesz powiedzieć czego w nim brakuje.
bo temat z którym zadanie jest powiązane to są wyjątki. Jest to w ramach ćwiczenia
na dziś się poddaję, dzięki wielkie za pomoc