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),那么它应该可以工作。
答案 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);
}
}