生成随机许可证PLate

时间:2014-11-08 15:06:21

标签: java

static String[] checklist = {"FOR", "AXE", "JAM", "JAB", "ZIP", "ARE", "YOU", "JUG", "JAW", "JOY"};
public static void main (String[] args)
{
    int letterRange=26;
    int numberRange=10;

    String  x;
    String letters = new String(Letters(letterRange));
    int numbers = Numbers(numberRange);

    System.out.println(" The randomly generated License Plate is: " +letters + "-" +numbers);
}

public static char[] Letters(int lRange)
{
    char[] letters = new char[3];
    Random r = new Random();
    boolean match = false;
    boolean resultOk = false;
    String result;
    //Generating Random strings (character array)
    for (int x=0; x<letters.length; x++)
    {
        letters[x] = (char)(r.nextInt(26) + 65);
    }

    //Logic for possibility exclusion
    while (true)
    {
        if (match == true)
        {
            for (int x=0; x<letters.length; x++)
            {
                letters[x] = (char)(r.nextInt(26) + 65);
            }
        }
        result = new String(letters);
        for (int i = 0; i < checklist.length; i++)
        {
            if (result == checklist[i])
            {
                match = true;
                break;
            }
            if ((i == checklist.length - 1) && (match == false))
            {
                resultOk = true;
                break;
            }
        }
        if (resultOk == true)
        {
            break;
        }
    }
    return letters;

}

public static int Numbers(int nRange)
{
    int result = 0;
    int[] numbers = new int[3];
    Random r = new Random();
    for (int x = 0; x < numbers.length; x++)
    {
        numbers[x] = r.nextInt(nRange);
    } 
    for (int i = numbers.length; i >= 1; i--)
    {
        result += numbers[i-1] * (10 * (numbers.length - i));
    }
    return result;
}  

基本上我正在尝试使用三个大写字母(65,ASCII码)和三个数字来创建随机牌照。当我运行程序时,我得到static int z=Integer.parseInt(y);的例外。基本上我所做的是将String数组转换为String,然后将String转换为int,然后将int转换为char,之后我执行了一个while循环(如果字母不等于b),那么它应该可以工作。

你能帮帮我吗?另外,我应该有两种方法吗?我想用一个盒子包围车牌,使它看起来很好。

3 个答案:

答案 0 :(得分:3)

好的,这一次只是因为你可能会在这个时间点从一个好的代码示例中学到更多东西。请自己研究,然后自己重​​写,你的老师不会相信你,你也不会学到任何东西。

public class LicensePlate {
    static String[] INVALID_PLATE_LETTERS = { "FOR", "AXE", "JAM", "JAB", "ZIP", "ARE", "YOU",
            "JUG", "JAW", "JOY" };

    static String generateLetters(int amount) {
        String letters = "";
        int n = 'Z' - 'A' + 1;
        for (int i = 0; i < amount; i++) {
            char c = (char) ('A' + Math.random() * n);
            letters += c;
        }
        return letters;
    }

    static String generateDigits(int amount) {
        String digits = "";
        int n = '9' - '0' + 1;
        for (int i = 0; i < amount; i++) {
            char c = (char) ('0' + Math.random() * n);
            digits += c;
        }
        return digits;
    }

    static String generateLicensePlate() {
        String licensePlate;
        String letters;
        do {
            letters = generateLetters(3);
        } while (illegalWord(letters));

        String digits = generateDigits(3);

        licensePlate = letters + "-" + digits;
        return licensePlate;
    }

    private static boolean illegalWord(String letters) {
        for (int i = 0; i < INVALID_PLATE_LETTERS.length; i++) {
            if (letters.equals(INVALID_PLATE_LETTERS[i])) {
                return true;
            }
        }
        return false;
    }

    public static void main(String args[]) {

        System.out.println(generateLicensePlate());
    }
}

答案 1 :(得分:1)

让我们从您的数组开始:

static String[] x = {"FOR", "AXE", "JAM", "JAB", "ZIP", "ARE", "YOU", "JUG", "JAW", "JOY"};

它包含禁止的词。这很好,除此之外你不需要任何其他东西。无需创建包含数组长度的变量z或包含此数组中某种b的变量char

现在主要方法:

public static void main(String args []) {
    String word;
    do {
        word = generateWord();
    } while(!isAllowed(word)); //generate new words until you've found an allowed one

    // print the generated and allowed word
    System.out.print(" - ");
    // generate 3 digits and print them
    System.out.println();
}

此方法的目的是为您生成牌照。作业提到了禁止的单词(你的数组x)。这意味着您必须生成车牌的第一部分,直到找到允许的单词为止。此任务在do/while循环中完成。它生成一个3个字符的长字,并测试是否允许。如果没有,则循环执行另一次迭代。如果“他”找到了允许的单词,则退出循环并将您的单词存储在变量word中。

生成3个字符长字的方法如下所示:

/** Generated a 3 character long word and returns it. */
public static String generateWord() {
    String result = "";
    // generate the word by adding 3 random chars to string "result".
    // You can append a char by doing: result = result + randomChar;
    return result;
}

您已经知道如何生成这样的单词,但是您需要返回该单词,而不是打印它,因此可以在main方法中使用它。你应该不难正确填写这个方法。该评论包含将生成的char添加到现有String的“方式”。

此方法:

/**
 * Tests if the given "word" is allowed or not.
 * If the word is in the array "x", then it is not allowed.
 * @return true if the word is allowed
 */
public static boolean isAllowed(String word) {
    /* Create a loop for array "x" that takes every entry of that array
     * and tests if it is the same as "word". If this is the case, then
     * return "false". If the word is not in the array, then this word
     * is allowed. Return "true" in this case.
     */
}

应检查参数word是否属于数组x,其中包含禁止的单词。 此方法需要一个循环来检查数组x的每个条目。你可以使用for loor:

for (int i = 0; i < x.length; i++) { }

for each循环:

for (String entry : x) { }

您可以找到有关这两种循环类型以及如何将其与数组一起使用的大量信息。

如果您的条目为x,那么您需要测试此enty是否与给定的word字符串相同。 类String有一个完美的方法来完成这项任务。阅读JavaDoc,你会发现它:JavaDoc of class String

我希望这个指南可以帮助您完成任务,我希望您从中学到了一些东西。 祝你好运:)。

答案 2 :(得分:0)

这就是我在课堂上构建它的方式,直接避免了...混乱。

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

    // Generate three random uppercase letters
    int letter1 = 65 + (int)(Math.random() * (90 - 65));
    int letter2 = 65 + (int)(Math.random() * (90 - 65));
    int letter3 = 65 + (int)(Math.random() * (90 - 65));    

    // Generate four random digits
    int number1 = (int)(Math.random() * 10);
    int number2 = (int)(Math.random() * 10);
    int number3 = (int)(Math.random() * 10);

    // Display number plate
    System.out.println("" + (char)(letter1) + ((char)(letter2)) + 
        ((char)(letter3)) + "-" + number1 + number2 + number3);
    }
}