中国語の書記体系に関する知識をテストするために、Java で非常に単純なコマンド ライン プログラムに取り組んでいます。目標は、英語、ピンイン、または漢字を表示し、表示されていない 2 をユーザーに入力させることです。いくつかの単純な配列エラーに対処した後、NullPointerException が発生しました。
今、私はそれが何であるかを理解していますが、なぜそれが起こっているのか分かりません.
Master.java というファイルには、次のものがあります。
static final String [] [] Mandarray = {{"You", "Nǐ", "你"}, {"Good", "Hǎo", "好"}};
Chinese_Mandarin オブジェクトのコンストラクターで、次のように、この配列の内容を Chinese_Mandarin オブジェクトのメンバーの 1 つである新しい配列にコピーします。
public Chinese_Mandarin(char transfer){
if(transfer == 'n' || transfer != 'y')System.exit(0);
for (int i = (Master.Mandarray.length-1); i>0 ;i--){
mandalist [i][0] = Master.Mandarray[i][0];
mandalist [i][1] = Master.Mandarray[i][1];
mandalist [i][2] = Master.Mandarray[i][2];
}
ユーザーが続行するかどうかを尋ねるシステムの上記の「if」部分では、それは重要ではありません。次に、最初の文字が * であるかどうかを調べて、同じエントリが再度表示されないようにします。これは、プログラムによって、エントリが既に使用されていることを示します。
public void presenter(){
Scanner chinEngl = new Scanner(System.in);
restart: for (int i = mandalist.length; i>0 ;i--){
randInt = random.nextInt(mandalist.length);
randIntSub = random.nextInt(3);
if(mandalist[randInt][randIntSub] == ""){
continue restart;
}
else if (((mandalist[randInt][randIntSub]).charAt(0)) == '*'){
continue restart;
}
ここでは、後で使用するスキャナーを初期化し、後で使用する 2 つのランダムな整数を作成し、要素が空でないことを確認します (空である場合は、「restart」タグに渡してループを続行します)。 .
行上:
else if (((mandalist[randInt][randIntSub]).charAt(0)) == '*'){
NullPointerException エラーが発生しましたが、その理由を理解できません... Master.mandarray は mandalist に転送されました。(しかし、それが私がここにいる理由です) したがって、完全なエントリの最初の文字を取得するのに問題はないはずです。 、 右?
システムが漢字を取得し、それを処理する方法がわからないという問題はありますか? それとも、私が行方不明になっているものですか?私を助けてくれる人に感謝します。確実にクレジットを獲得できます!