2014-10-19 52 views
0

沒關係,所以這是很長的。我正在爲課程開展一個項目,並給出了有關如何做的示例。我對此很新,所以我做了我認爲我可以做到但我似乎無法得到這個權利,並可能在此代碼中有大量的錯誤和不正確的東西。這是一個密碼認證系統,只是它的一半。我註釋掉了生成密碼功能,因爲我還沒有到那裏。整個程序都會編譯,但總會產生密碼錯誤。需要幫助的大塊項目。新的Java編程

public class FinalLab7 
    { 
    public static void main(String[] args) 
    { 

     // if (args.length == 0) // Generate password 
     //{ 

     //System.out.println("Your new password is: " + generateValidPassword()); 

     //} 
     if (args.length == 1) // Test password 
     {   
      System.out.print("The password you entered, " + args[0]); 

      if (isValidPassword(args[0])) 
      { 
       System.out.println(" is a valid password"); 
      } 
      else 
      { 
       System.out.println(" is NOT a valid password"); 
      }  
     } 
     else // To many command line arguments, educate user 
     { 

      System.out.println(); 
      System.out.println("This program takes either zero or one parameter."); 
      System.out.println("When run with zero parameters it will generate a password."); 
      System.out.print("When run with one parameter it will test whether"); 
      System.out.println(" the parameter is a valid password."); 
      System.out.println(); 
      System.out.println("A valid password has the following four properties:"); 
      System.out.println("1. A valid password contains between 8 and 14 characters, inclusive."); 
      System.out.println("2. A valid password contains two or more uppercase letters [A-Z]."); 
      System.out.println("3. A valid password contains two or more lowercase letters [a-z]"); 
      System.out.println("4. A valid password contains two or more numbers [0-9]"); 
      System.out.println(); 
      System.out.println(); 
     } 
    } 

static private boolean isValidPassword(String testPassword) 
{ 
    boolean returnValue = false; 
    int uppercasecount = 0; 
    int lowercasecount = 0; 
    int numbercount = 0; 


    if(uppercasecount>=2&&lowercasecount>=2&&numbercount>=2) 
    { 
     returnValue = true; 
    } 
    return returnValue; 
} 
    static public boolean CharacterIsNumber(char testChar) 
    { 
     int numbercount = 0; 
     boolean returnValue = false; 
     switch (testChar) 
     { 
      case '0': 
       returnValue = true; 
       //numbercount++; 
       break; 
      case '1': 
       returnValue = true; 
       //numbercount++; 
       break; 
      case '2': 
       returnValue = true; 
       //numbercount++; 
       break; 
      case '3': 
       returnValue = true; 
       //numbercount++; 
       break; 
      case '4': 
       returnValue = true; 
       //numbercount++; 
       break; 
      case '5': 
       returnValue = true; 
       //numbercount++; 
       break;    
      case '6': 
       returnValue = true; 
       //numbercount++; 
       break; 
      case '7': 
       returnValue = true; 
       //numbercount++; 
       break; 
      case '8': 
       returnValue = true; 
       //numbercount++; 
       break; 
      case '9': 
       returnValue = true; 
       //numbercount++; 
       break;   
     } 
     numbercount++; 
     return returnValue; 
    } 
    static public boolean CharacterIsUppercase(char testChar) 
    { 
     int uppercasecount = 0; 
     boolean returnValue = false; 

     switch (testChar) 
      { 
       case 'A': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'B': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'C': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'D': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'E': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'F': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'G': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'H': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'I': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'J': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'K': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'L': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'M': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'N': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'O': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'P': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'Q': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'R': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'S': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'T': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'U': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'V': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'W': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'X': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'Y': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
       case 'Z': 
        returnValue = true; 
        //uppercasecount++; 
        break; 
      } 

     uppercasecount++; 
     return returnValue; 
    } 
    static public boolean CharacterIsLowercase(char testChar) 
    { 
     int lowercasecount = 0; 
     boolean returnValue = false; 

     switch (testChar) 
      { 
       case 'a': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'b': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'c': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'd': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'e': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'f': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'g': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'h': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'i': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'j': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'k': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'l': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'm': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'n': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'o': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'p': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'q': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'r': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 's': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 't': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'u': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'v': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'w': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'x': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'y': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
       case 'z': 
        returnValue = true; 
        //lowercasecount++; 
        break; 
      } 

     lowercasecount++; 
     return returnValue; 
    } 
}   

我評論了幾個不同的部分,如uppercasecount ++函數,因爲我想,沒有工作的不同方法。本部分應檢查密碼是否有2個大寫字母,2個小寫字母和2個數字,並根據情況顯示「您輸入的密碼有效或無效」。這隻會每次顯示無效。

+0

你能給我們一些預期的輸入/輸出與你得到什麼?另外,出於好奇,爲什麼不使用[Character](http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html)類中定義的靜態方法如isDigit和isUpperCase()? – PakkuDon 2014-10-19 23:55:11

+1

減少這些長開關語句的提示:char只是ASCII表中的一個無符號值。這些值也一個接一個地出現。也就是說,'a'出現在'b'之前,但不一定在'Z'之後。這意味着您可以測試一個範圍而不是長開關語句。例如,您可以說, ** if(testChar> ='a'&& testChar <='z'){ returnValue = true; } lowerCaseCount ++; return lowerCaseCount; ** 來自Character類的其他方法,比如@PakkuDon指出的方法也是如此。 – 2014-10-19 23:59:08

+0

我在java中仍然是一個新手,我將離開迄今爲止在我的課程中學到的東西(我相信這對我的知識來說有點太複雜了)。這裏的任何幫助或小型教學都會非常有幫助。 – 2014-10-19 23:59:40

回答

0

代碼的問題來自方法* isValidPassword()**。您正在檢查是否符合條件,但您從未增加變量。我更新了你的代碼來縮短它。此外,它從您的代碼中刪除了錯誤。將您的代碼與此代碼進行比較。此外,此代碼不起作用。我只修復了錯誤並縮短了一些代碼。

package test; 

/** 
* 
* @author Tyler Weaver 
*/ 
public class Test { 

    public static void main(String[] args) { 
     // if (args.length == 0) // Generate password 
     //{ 

     //System.out.println("Your new password is: " + generateValidPassword()); 
     //} 
     if (args.length == 1) // Test password 
     { 
      System.out.print("The password you entered, " + args[0]); 

      if (isValidPassword(args[0])) { 
       System.out.println(" is a valid password"); 
      } else { 
       System.out.println(" is NOT a valid password"); 
      } 
     } else // To many command line arguments, educate user 
     { 

      System.out.println(); 
      System.out.println("This program takes either zero or one parameter."); 
      System.out.println("When run with zero parameters it will generate a password."); 
      System.out.print("When run with one parameter it will test whether"); 
      System.out.println(" the parameter is a valid password."); 
      System.out.println(); 
      System.out.println("A valid password has the following four properties:"); 
      System.out.println("1. A valid password contains between 8 and 14 characters, inclusive."); 
      System.out.println("2. A valid password contains two or more uppercase letters [A-Z]."); 
      System.out.println("3. A valid password contains two or more lowercase letters [a-z]"); 
      System.out.println("4. A valid password contains two or more numbers [0-9]"); 
      System.out.println(); 
      System.out.println(); 
     } 
    } 

    static private boolean isValidPassword(String testPassword) { 
     int uppercasecount = 0; 
     int lowercasecount = 0; 
     int numbercount = 0; 

     for (int count = 0; count < testPassword.length(); count++) { 
      char cur = testPassword.charAt(count); 

      if (CharacterIsNumber(cur)) { 
       numbercount++; 
      } else if (CharacterIsUppercase(cur)) { 
       uppercasecount++; 
      } else if (CharacterIsLowercase(cur)) { 
       lowercasecount++; 
      } 
     } 

     return (uppercasecount >= 2 && 
       lowercasecount >= 2 && 
       numbercount >= 2); 
    } 

    static public boolean CharacterIsNumber(char testChar) { 
     return Character.isDigit(testChar); 
    } 

    static public boolean CharacterIsUppercase(char testChar) { 
     return Character.isUpperCase(testChar); 
    } 

    static public boolean CharacterIsLowercase(char testChar) { 
     return Character.isLowerCase(testChar); 
    } 
} 

作爲一個方面說明:除非你不使用IDE,否則我不會使用args []命令行。如果使用IDE,它不會總是正常工作。如果你是新手,我會建議掃描儀課程。

+0

非常感謝您的幫助!該功能現在起作用。現在我可以研究代碼的其他功能:D – 2014-10-20 00:49:58