-1

Websites commonly require a password that satisfies several requirements. Write a program that checks if an input string satisfies the following (error message is shown for each):

At least 8 characters (Too short) At least one letter (Missing letter) At least one number (Missing number) At least one of these special characters: !, #, % (Missing special) Output OK, or all related error messages (in above order). If the input string is "Hello", the output is:

Too short Missing number Missing special Hints:

Declare a boolean variable for each requirement.

Use a for loop to visit each character, setting the corresponding boolean to true if satisfied (length is done differently though).

Use the functions Character.isLetter() and Character.isDigit() to detect if a character is a letter or a number.

This is what I have so far for my Java program, but I keep getting errors. Thanks for the help.

  import java.util.Scanner;

  public class Main {
  public static void main(String[] args) {
  Scanner scnr = new Scanner(System.in);
  String newString;
  boolean atLeastEightCharacter;
  boolean atLeastOneLetter;
  boolean atLeastOneNumber;
  boolean atLeastOneSpecialCharacter;
  
  newString = scnr.nextLine();
  
  atLeastEightCharacter = false;
  atLeastOneLetter = false;
  atLeastOneNumber = false;
  atLeastOneSpecialCharacter = false;
  
  if (newString.length() >= 8) {
     atLeastEightCharacter = true;
  for (int i = 0; i <newString.length(); i++) {
     if (Character.isLetter(i)) {
        atLeastOneLetter = true;
     }
     if (Character.isDigit(i)) {
        atLeastOneDigit = true;
     }
     if (newString(i) == '!' || newString(i) == '#' || newString(i) 
        == '%') {
        atLeastOneSpecialCharacter = true;
     }
  }
  }
  
  if (atLeastEightCharacter == false) {
     System.out.println("Too short");
  }
  if (atLeastOneLetter == false) {
     System.out.println("Missing letter");
  }
  if (atLeastOneDigit == false) {
     System.out.println("Missing number");
  }
  if (atLeastOneSpecialCharacter) {
     System.out.println("Missing special");
  } 
  }
  }
  • 2
    what errors do you get? please [edit](https://stackoverflow.com/posts/72650418/edit) your question to include the text of your errors. Also, is this inside a main() method? If there is any other code, please include it as well. – Esther Jun 16 '22 at 18:42

1 Answers1

3

the problem is that you're not checking string's symbols, but indexes, variable i is not char, but integer index

here is fixed version:

for (int i = 0; i <newString.length(); i++) {
    char c = newString.charAt(i);

    if (Character.isLetter(c)) atLeastOneLetter = true;
    if (Character.isDigit(c)) atLeastOneDigit = true;
    if (c == '!' || c == '#' || c == '%') atLeastOneSpecialCharacter = true;
}
Iłya Bursov
  • 23,342
  • 4
  • 33
  • 57