2015-06-20 52 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.输入我还没有检查这就是输入的边界。

相关问题