2015-06-20 22 views
0

我提出三個隨機字母用戶,可以說' J U D '和我的用戶給出一個字的每個字母開始與分配的隨機字母,例如:如何確定輸入字符串中的單詞是否以Java中隨機分配的字母開頭?

「只使用數據」。

我一直未能成功搜索如何驗證用戶的輸入是否以分配的隨機字母開始。

我的代碼

public static void generateLetters(){ 
    Random randomLetter = new Random(); 
    int i; 
    char[] letter = {'A', 'B', 'C', 'D', 'E', 'F'}; 
     // It's A-Z, but for typing sake... you get the point 
    char[] letters = new char[26]; 
     for(i = 0; i <= 3; i++){ 
      letters[i] = letter[randomLetter.nextInt(26)]; 
      System.out.printf(letters[i] + " "); 
     } 
} 

以上塊將隨機生成的字母和正常工作。下面,我將基本上輸入用戶輸入的內容。

public static String[] getWord(String[] word){ 
    System.out.println("Enter a word for your letters: "); 
    Scanner wordInput = new Scanner(System.in); 
    String inputWord = wordInput.nextLine().toUpperCase(); 
    return word; 
} 

簡單迄今爲止,這是我main功能:

public statc void main(String[] args){ 
    generateLetters(); 
    getWord(); 
} 

我需要返回的字符串從getWord()並驗證每個字的輸入並與隨機分配的字母開頭。我這樣做沒有成功。我在在線調查中發現的所有語法都讓我感到困惑。

+0

在空格(String.split())上分割一行,然後檢查單詞數是否爲3,然後獲取每個單詞的第一個字母(String.charAt())並檢查它是否正確。不要將inputWord命名爲一個應該包含3個單詞的文本行的變量。 –

+0

歡迎來到StackOverflow。如果可能的話,請將您的問題解決問題。 http://stackoverflow.com/help/how-to-ask也可能對你有用。關於generateLetters()的快速StackOverflowing –

回答

0

generateLetters()應返回生成的字母。

getWord()實際上並沒有對用戶輸入做任何事情。讓它返回一個包含用戶輸入的字符串。

您可以使用單獨的方法來驗證輸入。

下面是您的代碼的固定版本。

public static void main(String[] args) { 
    char[] letters = generateLetters(); 
    System.out.println(letters); 
    String input = getWord(); 
    System.out.println("Input is " + (isValid(letters, input) ? "valid" : "invalid")); 
} 


public static boolean isValid(char[] letters, String input) { 
    String[] words = input.split(" "); 
    for (int n = 0; n < words.length; n++) 
     if (!words[n].startsWith("" + letters[n])) 
      return false; 
    return true; 
} 

// Here're the fixed versions of your other two methods: 

public static String getWord(){ 
    System.out.println("Enter a word for your letters: "); 
    Scanner wordInput = new Scanner(System.in); 
    String inputWord = wordInput.nextLine().toUpperCase(); 
    wordInput.close(); 
    return inputWord; 
} 

public static char[] generateLetters(){ 
    Random randomLetter = new Random(); 
    char[] letter = new char[26]; 
    char c = 'A'; 
    for (int i = 0; i < 26; i++) 
     letter[i] = c++; 
    char[] letters = new char[26]; 
    for(int i = 0; i < 3; i++) 
     letters[i] = letter[randomLetter.nextInt(26)]; 
    return letters; 
} 
0
import java.util.Random; 
import java.util.Scanner; 


public class NewClass { 

public static void main(String[] args) { 
    char[] letters = generateLetters(); 
    String input = getWord(); 
    String[] words = input.split(" "); 
    if (words.length == letters.length) { 
     if (check(letters, words)) { 
      System.out.println("Yeah"); 
     } else { 
      System.out.println("Oops"); 
     } 
    } else { 
     System.out.println("INVALID"); 
    } 

} 

public static Boolean check(char[] letters, String[] words) { 
    for (int i = 0; i < letters.length; i++) { 
     if (words[i].charAt(0) != letters[i]) { 
      return false; 
     } 
    } 
    return true; 
} 

public static String getWord() { 
    System.out.println("Enter a word for your letters: "); 
    Scanner wordInput = new Scanner(System.in); 
    String inputWord = wordInput.nextLine().toUpperCase(); 
    return inputWord; 
} 

public static char[] generateLetters() { 
    Random randomLetter = new Random(); 
    char[] letters = new char[3];//Make it varaible length 
    for (int i = 0; i < letters.length; i++) { 
     letters[i] = (char) ((int) randomLetter.nextInt(26) + 'A'); 
     System.out.printf(letters[i] + " "); 
    } 
    return letters; 
} 
} 

方法2正則表達式

public static Boolean check(char[] letters, String word) { 

    return word.matches(letters[0]+"(\\S)*()"+letters[1]+"(\\S)*()"+letters[2]+"(\\S)*"); 

} 
+0

我認爲你最好指的是http://stackoverflow.com/questions/2626835/is-there-functionality-to-generate-a-random-character-in-java還有更好的方法,然後添加constante(64) – 2015-06-20 12:27:56

+0

@OSryx geez謝謝我修改了代碼 – Madhan

0

你可以試試這個。

public static String getWord() { 
     System.out.println("Enter a word for your letters: "); 
     Scanner wordInput = new Scanner(System.in); 
     String inputWord = wordInput.nextLine().toUpperCase(); 
     wordInput.close(); 
     return inputWord; 
    } 

    public static void main(String[] args) { 
     char[] letters = generateLetters(); 
     String input = getWord(); 
     StringTokenizer st = new StringTokenizer(input, " "); 
     int counter = 0; 
     boolean isValid = true; 
     while (st.hasMoreTokens()) { 
      String word = st.nextToken(); 
      if (!word.startsWith(String.valueOf(letters[counter]))) { 
       isValid = false; 
       break; 
      } 
      counter++; 
     } 
     if (isValid) { 
      System.out.println("valid"); 

     } else { 
      System.out.println("Invalid"); 

     } 

    } 

此代碼將只爲您提供的輸入工作,我假設你所需要的,即如果隨機字母' J U D '只有"Just Use Data".將可算作正確的輸入,而不是Use Just Data.輸入我還沒有檢查這就是輸入的邊界。

相關問題