前提・実現したいこと
Javaで、英語の文章を利用者に入力してもらい、各文の文頭及び文中の主語のiを全て大文字に置き換えるプログラムを作成していますが、エラーが発生し、調べても原因がよくわかりません。
Eclipseで作成したところ、プログラミングの最中に警告は何も表示されないのですが、実行すると以下のようなメッセージが表示されます。
発生している問題・エラーメッセージ
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.Scanner.nextByte()" because "e.Majuscule.lectureClavier" is null at Exercice_note1/e.Majuscule.afficheMenu(Majuscule.java:30) at Exercice_note1/e.Majuscule.main(Majuscule.java:48)
該当のソースコード
Java(ver.15)
1 2import java.util.Scanner; 3 4public class Majuscule { 5 6 static Scanner lectureClavier ; 7 8 public static void mettreEnMajuscule() { 9 System.out.println("文章を入力してください : ") ; 10 String texte = lectureClavier.nextLine() ; 11 //一文ごとに扱うため、".", "?"ないし "!"と空白の組み合わせを基準に入力された文章を分割 12 String[] phrases = texte.split("[¥.¥?!]") ; 13 //文頭及び空白に挟まれた全ての"i"を"I"に変換 14 for(int i = 0 ; i < phrases.length ; i++) { 15 String phrase = phrases[i]; 16 StringBuilder sb = new StringBuilder(); 17 sb.append(phrase); 18 //まず文頭の文字を大文字に変換 19 String remplace1 = sb.replace(0, 1, sb.substring(0, 1).toUpperCase()).toString(); 20 //空白に挟まれた全ての"i"を"I"に変換 21 String remplace2 = remplace1.replaceAll("\si\s", "\sI\s") ; 22 System.out.print(remplace2); 23 } 24 } 25 26 public static void afficheMenu() { 27 System.out.println("\n1.該当箇所を大文字に修正") ; 28 System.out.println("2.プログラムを終了する") ; 29 byte option = lectureClavier.nextByte() ; 30 switch(option) { 31 case 1 : 32 mettreEnMajuscule() ; 33 afficheMenu() ; 34 break ; 35 case 2 : 36 System.out.println("ご利用ありがとうございます"); 37 System.out.println("またのご利用をお待ちしております"); 38 System.exit(0); 39 default : 40 System.out.println("有効な数字を入力してください"); 41 afficheMenu(); 42 } 43 } 44 45 public static void main(String[] args) { 46 System.out.println("ようこそ!"); 47 afficheMenu(); 48 } 49 50} 51
試したこと
試しにmettreEnMajuscule()だけのプログラムを作り、実行してみましたが、同様に以下のメッセージが表示されました。
エラーメッセージ
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.Scanner.nextLine()" because "e.Test.lectureClavier" is null at Exercice_note1/e.Test.main(Test.java:10)
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー