疑問
前に質問させていただいた文字の配列への格納(以下参照)
import java.util.Scanner; public class KRY { public static void main(String[] argst) { // 文字をキーボードから入力し、配列に記憶 String s[] = new String[5]; // Scannerクラスのインスタンスの生成 Scanner sc = new Scanner(System.in); for (int i = 0; i < s.length; i++) { System.out.println("文字を入力"); // 文字をキーボードから入力し、配列に記憶 s[i] = sc.next(); } for (int i = 0; i < s.length; i++) { System.out.printf("s[%d]=%s\n", i, s[i]); switch (s[i]) { case "a": a(); break; case "b": b(); break; case "c": c(); break; case "d": d(); break; case "e": e(); break; default: break; } } } public static void a() { System.out.println("AAAAAAAAAAA"); } public static void b() { System.out.println("BBBBBBBBBBB"); } public static void c() { System.out.println("CCCCCCCCCCC"); } public static void d() { System.out.println("DDDDDDDDDDD"); } public static void e() { System.out.println("EEEEEEEEEEE"); } }
上記のプログラムを改編し、keyboardから入力をされた文字をターミナル上で読み込みターミナル上に文字を書き込むプログラムからkeyboardから入力された文字を格納して(これはターミナル上で良い)、音楽を鳴らすプログラムにしようと思ったのですが、
import java.applet.*; public class KRY{ private AudioClip audio = Applet.newAudioClip(getClass().getResource("音楽ファイル")); public static void main(String[] argst) { pong s[] = new pong[5]; Scanner sc = new Scanner(System.in); for (int i = 0; i < s.length; i++) { System.out.println("文字を入力"); s[i] = sc.next(); } for (int i = 0; i < s.length; i++) { System.out.printf("s[%d]=%s\n", i, s[i]); switch (s[i]) { case "a": a(); break; default: break; } } } public static void a() { audio.play(); } }
コンパイルしようとしたところ
staticでない変数 audioBassをstaticコンテキストから参照することはできません audioBass.play();
とでてしまいますどうしたらいいでしょうか。
###追記
問題に不備がありましたのと回答をふまえてコードを下記のようにしてみましたが
import java.util.Scanner; import java.applet.*; public class KRY { public AudioClip audioBass = Applet.newAudioClip(getClass().getResource("./WAV/Bass.wav")); public static void main(String[] argst) { // 文字をキーボードから入力し、配列に記憶 String s[] = new String[5]; // Scannerクラスのインスタンスの生成 Scanner sc = new Scanner(System.in); for (int i = 0; i < s.length; i++) { System.out.println("文字を入力"); // 文字をキーボードから入力し、配列に記憶 s[i] = sc.next(); } for (int i = 0; i < s.length; i++) { System.out.printf("s[%d]=%s\n", i, s[i]); switch (s[i]) { case "a": a(s); break; default: break; } } } public static void a(KRY s) { s.audioBass.play(); } }
これを実行してみたところこのエラーが出ます。
クラス KRYのメソッド aは指定された型に適用できません。 a(s); ^ 期待値: KRY 検出値: String[] 理由: 実引数String[]はメソッド呼出変換によってKRYに変換できません エラー1個
何をいっているかはわかるのですがどうしたらいいのか。。
何か案はございますでしょうか。
###追記2
たびたびすいません。
修正を重ねた結果コンパイルすることはできたのですが、音楽を鳴らす文字aを入力するとエラーが出てしまいます。
私が考えるにa(h)の所がまちがっているのでは??と思うのですがわかる方、いらっしゃいますでしょうか。。
import java.util.Scanner; import java.awt.event.*; import java.awt.geom.Ellipse2D; import java.awt.*; import javax.swing.*; import java.util.*; import java.util.Scanner; import java.applet.*; import java.awt.event.KeyListener; import java.awt.event.KeyEvent; import java.awt.event.InputEvent; public class KRY { public AudioClip audioBass = Applet.newAudioClip(getClass().getResource("音楽ファイル")); static KRY h; public static void main(String[] argst) { String s[] = new String[5]; Scanner sc = new Scanner(System.in); for (int i = 0; i < s.length; i++) { System.out.println("please tipe"); s[i] = sc.next(); } for (int i = 0; i < s.length; i++) { System.out.printf("s[%d]=%s\n", i, s[i]); switch (s[i]) { case "a": a(); break; default: break; } } } public static void a(KRY h) { h.audioBass.play(); } }
次が実行文とエラー文です。
please tipe s please tipe s please tipe s please tipe a s[0]=s s[1]=s s[2]=s s[3]=a Exception in thread "main" java.lang.NullPointerException at KRY.a(KRY.java:39); at KRY.main(KRY.java:31);
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/20 15:46
退会済みユーザー
2017/01/20 19:57 編集