我是一名Java新手,我正在為一個班級制作的游戲尋找一個關鍵部分的解決方案。我的想法是做一個非常簡單的股票市場模擬游戲,但問題是要創建虛假的公司名稱。我有三個陣列,分別代表公司的名、中名和姓。我試圖讓其中一些公司有一個字的名字,另一些有兩個字,等等。到目前為止,我已經使用了一個亂數生成器和if/elif/else陳述句來模擬一個,但是我想有五個,我希望有一個更有效的方法來實作。以下是代碼:
import java.util.Random;
import java.io.*;
import java.util.*;
//Imports for methods and such
class Main {
//主類
public static void main(String[] args) {
//代碼都在這里。
String[] companyFirstNames = {"Alpine"/span>, "Bear"/span>, "Bull"/span>, "Cuckoo"/span>, "Delta", "龍", "回聲", "戰斗機", "巨人", "H20", "Indo"/span>, "Jared"/span>, "Jason"/span>, "Kicker"/span>, "Lodge"/span>, "Little"/span>, "Manzo", "Mint", "鄰居", "Nelson", "Ossuary", "開放", "私人", "貧窮", "Quant", "Quiant", "Reach", "Rebel"/span>, "Space"/span>, "Spear"/span>, "Titus"/span>, "Trebble"/span>, "underdog", "Upper", "Vital", "Vert", "White", "Whistle", "X's", "Yuri's", "Yogurt", "Zebra"};
String[] companySecondNames = {" Science", " Technology", " Arts", " Research", " Laboratory" , " 住宿", " 木工", " 時尚", " Oil", " Trading", " Investing"}。
String[] companyLastNames = {" Limited"/span>, " Co."/span>, " Corp. ", " Corporation", " Ltd", " Institute"。" Association", " Federation", " Firm"};
//三個陣列的隨機公司名稱 "件"。
Random randomNamer = new Random() 。
//用于獲取隨機名稱& ints。
int randomOne = randomNamer.nextInt(companyFirstNames.length)。
int randomTwo = randomNamer.nextInt(companySecondNames.length)。
int randomThree = randomNamer.nextInt(companyLastNames.length)。
//3個被賦予隨機值的陣列的ints。
int numberOne = randomNamer.nextInt(100)。
//Getting a random 0-100 number[/span]。
String bigNameCompany = companyFirstNames[隨機一] companySecondNames[隨機二] companyLastNames[隨機三] 。
String midNameCompany = companyFirstNames[隨機一] companyLastNames[隨機三]。
String smallNameCompany = companyFirstNames[randomOne] 。
//可能產生的三種型別的公司名稱//我想命名的五家公司if (numberOne <= 45)
//If int is 0-45....
{
companyOne = bigNameCompany;
//If int is 0-45.
}
else if (numberOne <= 85)
//If between 46-85..._/span>
{
companyOne = midNameCompany;
//Two word name[/span]。
}
else[/span
{
companyOne = smallNameCompany;
//O one word name } else ?
}
System.out.println(companyOne)。
//列印第一個公司的名稱 //列印第一個公司的名稱
//Can I can get a loop to do this more efficiently for 5 companies?
}
}
uj5u.com熱心網友回復:
我鼓勵你用它來玩。編程的樂趣就在于解決這樣的小難題,而且有很多方法可以做這樣的事情。這里有一種方法可以給你一些想法:
Random randomNamer = new Random() 。
String[] companyFirstNames = { "Alpine"/span>, "Bear"/span>, "Bull"/span>, "Cuckoo"/span>, "Delta"/span>, "龍", "回聲", "戰斗機", "巨人", "H20", "Indo"/span>, "Jared"/span>, "Jason"/span>, "Kicker"/span>, "Lodge"/span>, "Little"/span>, "Manzo", "Mint", "鄰居", "Nelson", "Ossuary", "開放", "私人", "貧窮", "Quant", "Quiant", "Reach", "Rebel"/span>, "Space"/span>, "Spear"/span>, "Titus"/span>, "Trebble"/span>, "underdog", "Upper", "Vital", "Vert", "White", "Whistle", "X's", "Yuri's", "Yogurt", "Zebra" };
String[] companySecondNames = { " Science", " Technology", " Arts", " Research", " Laboratory" , " 住宿", " 木工", " 時尚", " Oil", " Trading", " Investing" };
String[] companyLastNames = { " Limited"/span>, " Co."/span>, " Corp. ", " Corporation", " Ltd", " Institute"。" Association", " Federation", " Firm" };
for (int i = 0; i < 5; i ) {
int chance = randomNamer.nextInt(100)。
int firstIdx = randomNamer.nextInt(companyFirstNames.length)。
int secondIdx = randomNamer.nextInt(companySecondNames.length)。
int lastIdx = randomNamer.nextInt(companyLastNames.length)。
String name = null;
if (chance <= 45) {
name = companyFirstNames[firstIdx] companySecondNames[secondIdx] companyLastNames[lastIdx] 。
} else if (chance <= 85) {
name = companyFirstNames[firstIdx] companyLastNames[lastIdx]。
} else {
name = companyFirstNames[firstIdx];
}
System.out.println(name)。
uj5u.com熱心網友回復:
你的解決方案可能會奏效,但你可以重新使用你的Random來決定公司名稱是否應該有一個、兩個或三個單詞,以使其更加緊湊。這個例子將總是生成一個至少有一個名字的公司,而第二個和第三個的概率是相同的:
final Random rnd = new Random() 。
final String[] companies = new String[5] 。
for(int i = 0; i < companies.length; i ) {
final int idx = rnd.nextInt(100)。
companies[i] = companyFirstNames[idx%companyFirstNames.length] (rnd.nextBoooo)
(rnd.nextBoolean() ? companySecondNames[idx%companySecondNames.length] : ""/span>)
(rnd.nextBoolean() ? companyLastNames[idx%companyLastNames.length] : "") 。
}
你可以使用類似rnd.nextInt(2) == 0或rnd.nextInt(3) == 0的東西來玩一個較長的公司名稱的幾率,而不是nextBoolean()。
uj5u.com熱心網友回復:
你可以為此創建一個簡單的方法(而且你不需要在你的名字Strings中留白):
private final String[] companyFirstNames = {"alpine", "Bear"/span>, "Bull"/span>, "Cuckoo"/span>, "三角洲", "龍", "回聲"。"戰斗機", "巨人", "H20"。"Indo"/span>, "Jared"/span>, "Jason"/span>, "Kicker"/span>, "Lodge"/span>, "Little"/span>, "Manzo", "Mint", "鄰居", "Nelson"/span>, "Ossuary"/span>, "Open"/span>, "私人", "貧困", "快速"。"Quiant", "Reach", "rebel", "空間", "長矛", "Titus"。"Trebble", "underdog", "Upper", "Vital", "Vert"。"白色", "口哨", "X's"。"Yuri's", "Yogurt", "Zebra"};
private final String[] companySecondNames = {"科學", "技術", "藝術", "研究"。"實驗室", "住宿", "木材加工", "時裝", "石油", "貿易", "投資"};
private final String[] companyLastNames = {"limited", "Co. ", "Corporation", "Ltd", "Institutions"。"協會", "聯合會", "事務所"};
private final Random randomNamer = new Random() 。
private String generateRandomName() {
StringBuilder sb = new StringBuilder();
int size = random.nextInt(100)。
int first = random.nextInt(companyFirstNames.length)。
sb.append(companyFirstNames[first])。
if (size <= 85) {
int second = random.nextInt(companySecondNames.length)。
sb.append(' ').append(companySecondNames[second] )。
}
if (size <= 45) {
int last = random.nextInt(companyLastNames.length)。
sb.append(' '/span>).append(companyLastNames[last])。
}
return sb.toString()。
}
然后你可以做:
private List<String> generateNames(int numberOfNames) {
return IntStream.range(0, numberOfNames).mapToObj(i -> generateRandomName()).collectors.toList()。
}
呼叫最后一個方法將允許你創建任何你想要的名字:
List<String> names = generateNames(5)
System.out.println(names)。
輸出:
[White Trading Firm, Open Research, Indo Oil, Fighter Technology, Cuckoo Oil Corporation]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/309959.html
標籤:
