簡単な地名作成ツールを作る ランダムに生成するやつ作成編

簡単な地名作成ツールを作る 検討編

簡単な地名作成ツールを作る 羅列した漢字から重複を除いた漢字を一文字ずつに分割しそのままコピペすれば配列として使えるように出力するやつ作成編

そのまま配列に使えるやつを作ったのでそれを利用してシャッフル表示をするやつを作りましょう。
とはいえやることは前のコードとほぼ同じです。というかさらに簡単です。

Advertisement

開発はVSCode上に構築したJava開発環境で

Visual Studio CodeでJavaの環境を構築する

何でも良いのですが、せっかく構築したのでVSCodeで作ります。

羅列した漢字から重複を除いた漢字を一文字ずつに分割しそのままコピペすれば配列として使えるように出力するやつのコードを一部利用

漢字を羅列したテキストファイルを元にシャッフルさせたいので利用します。

今回はわざわざコピペできるようにする必要は無くそのまま配列に入れれば良いだけです。

なのでテキストファイル読み込みと重複チェックはそのまま利用します。

また、テキストファイル出力に関してもほぼ同じく利用します。

地名生成

ランダムとかを使ってうまいことやります。特に難しくないと思います。

完成したコード

package app;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;

public class App {
public static void main(String[] args) throws Exception {
try{
File inputFile = new File(“C:\\hoge\\hoge.txt”);  //入力テキストファイル指定
FileReader fileReader = new FileReader(inputFile); //入力テキストファイル読み込み

ArrayList<Character> charList = new ArrayList<Character>(); //読み込んだ文字リスト
boolean doubleCheck = true; //重複チェック用変数

int readCharCode = fileReader.read(); //テキストから読み込んだ文字コードを代入
if(readCharCode != -1){ //文字が読み込まれている場合
charList.add((char)readCharCode); //初回代入
}

readCharCode = fileReader.read(); //次の文字の文字コード読み込み
while(readCharCode != -1){ //文字が読み込まれている限りループ
for(int i = 0;i <= charList.size() – 1; i++) { //charListに代入されている文字数回ループ
if(charList.get(i).equals((char)readCharCode)){ //文字が被っていたら
doubleCheck = false; //重複チェックにfalse代入
break; //forから抜け出す
}
}

if(doubleCheck){ //doubleCheckがtrueならば
charList.add((char)readCharCode); //doubleCheckに文字コードから文字に変換して追加
}

doubleCheck = true; //doubleCheckをリセット
readCharCode = fileReader.read(); //次の文字の文字コード読み込み
}
fileReader.close(); //ファイルを閉じる

File outputFile = new File(“C:\\hoge\\hogehoge.txt”); //出力テキストファイル指定
FileWriter fileWriter = new FileWriter(outputFile, true); //出力テキストファイルを追加書き込みで読み込み

int numberOfGeneration = 20; //地名生成数
int numberOfLetters = 2; //地名文字数

Random random = new Random(); //ランダム利用

for(int j = 1;j <= numberOfLetters;j++){ //初回生成(空白を良い感じに入れるため)
int randomNum = random.nextInt(charList.size() – 1);
fileWriter.write(charList.get(randomNum));
}

for(int i = 1 + 1;i <= numberOfGeneration;i++){ //地名生成数から初回生成を引いた数生成
fileWriter.write(” “); //空白追加
for(int j = 1;j <= numberOfLetters;j++){ //文字数指定
int randomNum = random.nextInt(charList.size() – 1); //ランダム数値生成
fileWriter.write(charList.get(randomNum)); //ランダム数値に基づいた漢字をテキストファイルに追加
}
}
fileWriter.write(“\r\n”); //改行追加(CRLF)

fileWriter.close(); //ファイルを閉じる
}catch(FileNotFoundException e){ //ファイルが存在しない時
System.out.println(“ファイルが存在しません”);
}catch(IOException e){
System.out.println(“入出力エラー”); //入出力でエラーが発生した時
}
}
}

Advertisement

超絶読みにくいとは思いますが、参考にしたい方は参考にしてください。自信はありません。

あとはこれをWeb上で動くようにするだけです・・・(個人的に難易度が高いのはここからです)