質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

2995閲覧

文字を配列に入れたあと文字によって動作をさせたい場合。

datuota00

総合スコア20

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/01/20 10:08

編集2017/01/20 15:08

疑問

前に質問させていただいた文字の配列への格納(以下参照)

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);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

以下で五回の入力に一回以上aを入れると再生できました

java

1import java.util.Scanner; 2import java.applet.*; 3public class NVN { 4 5 public static AudioClip audioBass = Applet.newAudioClip(new NVN().getClass().getResource("./WAV/Bass.wav")); 6 public static void main(String[] argst) { 7 8 9 // 文字をキーボードから入力し、配列に記憶 10 String s[] = new String[5]; 11 // Scannerクラスのインスタンスの生成 12 Scanner sc = new Scanner(System.in); 13 for (int i = 0; i < s.length; i++) { 14 System.out.println("文字を入力"); 15 // 文字をキーボードから入力し、配列に記憶 16 s[i] = sc.next(); 17 } 18 19 for (int i = 0; i < s.length; i++) { 20 System.out.printf("s[%d]=%s\n", i, s[i]); 21 22 switch (s[i]) { 23 case "a": 24 a(new NVN()); 25 break; 26 default: 27 break; 28 } 29 } 30 31 } 32 33 public static void a(NVN s) { 34 s.audioBass.play(); 35 } 36}

投稿2017/01/20 12:13

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

datuota00

2017/01/20 15:46

回答ありがとうございます。 自分の使っているpcはos win10でjavaのバージョンは1.8.0なのですが、 回答いただいたプログラムを実行してみても配列結果が出るだけでおとがならないのです。 何が原因かわかりますでしょうか。。 あなた様のpcで音が鳴っているのにこちらでならない理由がわからず。。。すいません。。
退会済みユーザー

退会済みユーザー

2017/01/20 19:57 編集

上記のコードだと、コード上に書いた.wavファイルが存在しない場合はエラーが出ました なので プログラムに.wavファイルは認識されていると思います Bass.wavがどのくらいの長さの再生時間のファイルなのか分かりませんが、全ての配列の要素にaを入力しても再生されて聞こえるのは一回分長さだけなので一秒程度のものだと聞き逃す場合があります また 音量の問題(小さくなっているか ミュートになっている)の可能性も考えられます それ以外の理由だと、私にもどうにもできそうにありません
guest

0

staticでない変数 audioBassをstaticコンテキストから参照することはできません

というエラーの原因であるaudioBassが提示されたコードの中にありませんが・・・それはともかくエラーの原因は「クラスの非staticなフィールド・メソッドを」「staticなメソッドなどからアクセス」した際にこのエラーが出ます。非staticなフィールド・メソッドをアクセスする場合には「どのインスタンスのフィールド・メソッドに対してアクセスするか」がわからないといけないのにそれが与えられていないからです。

java

1class A { 2 static sf; 3 int f; 4 5 static void m(A a) { 6 f = 1; // NG: どのインスタンスのfなのかわからないからNG(compile error)。 7 a.f = 2; // OK: インスタンスaのフィールドfであることがわかるからOK。 8 sf = 3; // OK: sfはstaticなので「どのインスタンスか」の指定は不要なのでOK。 9 } 10}

投稿2017/01/20 10:27

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

datuota00

2017/01/20 10:48

ご解答ありがとうございます。 すごく分かりやすくためになります。 回答をふまえた上で手直しを加えてみましたが、またエラーが出てしまいました。。 エラーの意味事態はわかるのですが、難しいです。 よろしければまたご解答お願い致します。
KSwordOfHaste

2017/01/20 10:54

メソッドaの引数に許される型はKRY型です。このメソッドをa(s)で呼び出してますがsの型は何かを考えるとエラーの原因がわかるはず・・・
datuota00

2017/01/20 15:00

考えた結果、ご指摘いただいた箇所はわかりました! 自分で考えるようにわざわざヒントありがとうございました。 また、コンパイルすることもできたのですが追記2のコードを実行してもaを入力したときにエラー分が表示されるのです。まだどこかがうまくかみ合ってないせいだと思います。。 またよろしければ解答お待ちしております。
guest

0

java

1private static AudioClip audio = Applet.newAudioClip(getClass().getResource("音楽ファイル"));

とか?

投稿2017/01/20 10:10

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

datuota00

2017/01/20 10:25

``` staticでないメソッド getClass()をstaticコンテキストから参照することはできません ``` になってしまいます。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問