2012-10-14 156 views
0

首先,遺憾的是代碼有點雜亂。它格式不是很好。我的任務是隨機生成由大寫和小寫字母組成的密碼,長度由用戶指定。到目前爲止,我的代碼還沒有完成,但那是因爲我遇到了一個問題。(Java)條件語句

我的密碼將顯示小寫和大寫字母,但不夠長。

例如,如果用戶想要一個長度爲14的密碼,我只會得到一個小於這個密碼的密碼。它永遠不會是它應該是的長度。

import java.util.Scanner; 
import java.util.Random; 

public class Password{ 
    public static void main(String [] args){ 
     Scanner in = new Scanner(System.in); 
     int passwordLength = 0; 
     Random randNum = new Random(); 
     int randNumAscii = 0; 
     String generatedPassword = ""; 

     System.out.print("Password Length (1-14): "); 
     passwordLength = in.nextInt(); 
     for(int count = 0; count < passwordLength; count++){ 
      randNumAscii = randNum.nextInt(123); 
      if(randNumAscii >= 65 && randNumAscii <= 90 || randNumAscii >= 97 && randNumAscii <= 122) 
       generatedPassword += (char)randNumAscii; 
      else 
       randNumAscii = randNum.nextInt(123); 
     } 
     System.out.println(generatedPassword); 
    } 
} 
+0

任何人都可以提供幫助嗎? – user1713336

+0

匆匆一瞥,我不確定你的問題是什麼。 – Makoto

+0

因此,當用戶選擇數字2並假設長度爲14時,生成的密碼應該由長度爲14個字符的小寫字母和大寫字母組成。我的問題是它最終不到14個字符。 – user1713336

回答

1

這是因爲您只在生成的密碼中添加一個字符(如果它在您選擇的範圍內)。如果一個字符在randNumAscii >= 65 && randNumAscii <= 90 || randNumAscii >= 97 && randNumAscii <= 122之外被隨機化,那麼您永遠不會將其附加到字符串中。

你可以做的是在for循環中有一個while循環,直到滿足條件爲止,或者繼續for循環,但是減少count變量,因此一個新的字符被生成「with the index」說話。

+0

我甚至沒有考慮減少count變量。感謝您幫助我以全新的方式思考解決我的問題。 – user1713336

1

正如你所說,你的問題就出在這裏:

randNumAscii = randNum.nextInt(123); 
if(randNumAscii >= 65 && randNumAscii <= 90 || randNumAscii >= 97 && randNumAscii <= 122) 
    generatedPassword += (char)randNumAscii; 
else 
    randNumAscii = randNum.nextInt(123); 

讓我來解釋爲什麼:

基本上,當userSelection == 2,你的代碼說:「一旦在給定長度的每個空間,挑選一些隨機字符,如果是大寫或小寫,請添加,否則請更改。「但是,你忘記做什麼,是追加「改變」的隨機字符。

你需要在這裏做的是這樣的(僞):

randNumAscii = [random from 0 to 123] 
while randNumAscii is not uppercase and not lowercase: 
    randNumAscii = [random from 0 to 123] 
append (char)randNumAscii to generatedPassword 

因爲這是一個任務,我離開的實施給你。由於我不確定您的技能水平,因此您可能需要閱讀the documentation on while