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

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

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

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

Q&A

解決済

1回答

3945閲覧

クラス名が同じなのに「シンボルが見つかりません」と出ます。

hangyo

総合スコア12

Java

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

0グッド

0クリップ

投稿2018/11/09 12:10

編集2018/11/19 04:48

Javaで「MIDIファイルを入力し、音の強弱を基にしてBPMを推定する」というプログラムを書いているのですが、コマンドプロンプトでコンパイルを実行したところ、「シンボルを見つけられません」というエラーを返されました。

MIDIMain.java:メインファイル
Binary.java:BufferedInputStream
Text.java:書き込み
MIDIPlay.java:MIDIを解析する
Track.java:タイミングデータ読み込み
Note.java:パラメータを返す
Delta.java:音とその次の音の発音時刻の差を格納し、出現数カウント

また、クラスパスですがC:\Program Files\Java\jdk1.8.0_181\binに設定してあります。javac -version, java versionコマンドは共に通りました。

Visual Studio Codeで編集を行っていますが、走らせたら「指定されたパスが見つかりません。」とエラーを返されました。

MIDIMain.java:16: エラー: シンボルを見つけられません Binary bi=new Binary(a); //error point ^ シンボル: クラス Binary 場所: クラス MIDIMain MIDIMain.java:16: エラー: シンボルを見つけられません Binary bi=new Binary(a); //error point ^ シンボル: クラス Binary 場所: クラス MIDIMain MIDIMain.java:17: エラー: シンボルを見つけられません Text te=new Text(a); //error point ^ シンボル: クラス Text 場所: クラス MIDIMain MIDIMain.java:17: エラー: シンボルを見つけられません Text te=new Text(a); //error point ^ シンボル: クラス Text 場所: クラス MIDIMain MIDIMain.java:18: エラー: シンボルを見つけられません MIDIPlay mp=new MIDIPlay(bi,te); //error point ^ シンボル: クラス MIDIPlay 場所: クラス MIDIMain MIDIMain.java:18: エラー: シンボルを見つけられません MIDIPlay mp=new MIDIPlay(bi,te); //error point ^ シンボル: クラス MIDIPlay 場所: クラス MIDIMain MIDIMain.java:31: エラー: シンボルを見つけられません ArrayList<Track> Tr=new ArrayList<Track>(); //error point ^ シンボル: クラス Track 場所: クラス MIDIMain MIDIMain.java:31: エラー: シンボルを見つけられません ArrayList<Track> Tr=new ArrayList<Track>(); //error point ^ シンボル: クラス Track 場所: クラス MIDIMain MIDIMain.java:36: エラー: シンボルを見つけられません Tr.add(new Track(I)); //error point ^ シンボル: クラス Track 場所: クラス MIDIMain MIDIMain.java:54: エラー: シンボルを見つけられません ArrayList<Note> Nt=Tr.get(0).getNote(); //error point ^ シンボル: クラス Note 場所: クラス MIDIMain MIDIMain.java:63: エラー: シンボルを見つけられません ArrayList<Delta> delta=new ArrayList<Delta>(); //error point ^ シンボル: クラス Delta 場所: クラス MIDIMain MIDIMain.java:63: エラー: シンボルを見つけられません ArrayList<Delta> delta=new ArrayList<Delta>(); //error point ^ シンボル: クラス Delta 場所: クラス MIDIMain MIDIMain.java:76: エラー: シンボルを見つけられません  delta.add(new Delta(Nt.get(j).getDelta())); //error point ^ シンボル: クラス Delta 場所: クラス MIDIMain MIDIMain.java:83: エラー: シンボルを見つけられません Delta maxdelta=delta.get(0); //error point ^ シンボル: クラス Delta 場所: クラス MIDIMain エラー14個

該当のソースコード

java

1package MIDI; 2import MIDI.*; 3import java.io.*; 4import java.util.ArrayList; 5import java.util.StringTokenizer; 6 7class MIDIMain{ 8 public static void main(String args[])throws IOException{ 9 10 //MIDI読み込み~タイミングデータ作成 11 String a="Midi19"; 12 double BPM=154; 13 Binary bi=new Binary(a); //error point 14 Text te=new Text(a); //error point 15 MIDIPlay mp=new MIDIPlay(bi,te); //error point 16 te.TextClose(); 17 bi=null; 18 te=null; 19 20 21 //タイミングデータ読み込み、Trackごとにデータを格納していく 22 File fp=new File("Output/"+a+".txt"); 23 FileReader fr=new FileReader(fp); 24 BufferedReader br=new BufferedReader(fr); 25 String line=""; 26 StringTokenizer token; 27 28 ArrayList<Track> Tr=new ArrayList<Track>(); //error point 29 int I=0; 30 while((line=br.readLine())!=null){ 31 //略 32 } 33 34 ArrayList<Note> Nt=Tr.get(0).getNote(); //error point 35 for(int i=0;i<Tr.size();i++){ 36 Nt=Tr.get(i).getNote(); 37 if(Nt.size()!=1){ 38 break; 39 } 40 } 41 42 //音とその次の音の発音時刻の差を格納し,出現数カウント 43 ArrayList<Delta> delta=new ArrayList<Delta>(); //error point 44 for(int i=0;i<Tr.size();i++){ 45 Nt=Tr.get(i).getNote(); 46 for(int j=0;j<Nt.size();j++){ 47 int flag=0; 48 for(int k=0;k<delta.size();k++){ 49 if(delta.get(k).getDelta()==Nt.get(j).getDelta()){ 50 flag=1; 51 delta.get(k).PlusCount(); 52 break; 53 } 54 } 55 if(flag==0){ 56 delta.add(new Delta(Nt.get(j).getDelta())); //error point 57 } 58 } 59 } 60 System.out.println(); 61 62 //デルタTの出現回数最多を求める 63 Delta maxdelta=delta.get(0); //error point 64 for(int i=1;i<delta.size();i++){ 65 if(maxdelta.getCount()<delta.get(i).getCount()){ 66 maxdelta=delta.get(i); 67 } 68 } 69 70 //テンポ値第一候補算出 71 double MaxBPM=(60.0/(((double)maxdelta.getDelta())*60.0/BPM/(double)mp.getDeso())); 72 System.out.println("第一候補"+MaxBPM); 73 74 //拍の開始位置をずらしながら,BPMごとに1拍目が一番強い回数をカウント 75 for(int i=0;i<Tr.size();i++){ 76 Tr.get(i).setVolume(maxdelta.getDelta()); 77 ArrayList<Integer> Volume=Tr.get(i).getVolume(); 78 if(Volume!=null){ 79 //略 80 81 double[] max=new double[4]; 82 int[] maxl=new int[4]; 83 for(int l=0;l<4;l++){ 84 //略 85 } 86 } 87 88 for(int k=1;k<4;k++){ 89 for(int l=maxl[0];l<Math.pow(2, k+2);l+=4){ 90 //略 91 } 92 } 93 } 94 System.out.println(); 95 int kekka=0; 96 double Min=0; 97 for(int k=0;k<4;k++){ 98 //略 99 } 100 } 101 } 102 103 System.out.println("結果"+kekka); 104 break; 105 } 106 } 107 } 108 109} 110 111***** 112//Binary.java 113package MIDI; 114 115import java.io.*; 116 117class Binary{ 118 //protected BufferedInputStream bis; 119 BufferedInputStream bis; 120 Binary(String a)throws IOException{ 121 File fp=new File("Input/"+a+".mid"); 122 FileInputStream fis=new FileInputStream(fp); 123 bis=new BufferedInputStream(fis); 124 } 125 126} 127 128***** 129//Text.java 130package MIDI; 131import java.io.*; 132 133class Text{ 134 protected PrintWriter pw; 135 Text(String args){ 136 File Dire=new File("Output"); 137 if(Dire.exists()==false){ 138 Dire.mkdir(); 139 } 140 File fp=new File("Output/"+args+".txt"); 141 try{ 142 fp.createNewFile(); 143 }catch(IOException e){ 144 145 } 146 try{ 147 pw=new PrintWriter(new BufferedWriter(new FileWriter(fp))); 148 }catch(IOException e){ 149 } 150 } 151 152 void TextClose(){ 153 pw.close(); 154 } 155 156} 157 158 159***** 160//Track.java 161package MIDI; 162 163import java.util.ArrayList; 164 165public class Track { 166 private int Num; 167 private ArrayList<Note> Nt=new ArrayList<Note>(); 168 private ArrayList<Integer> Volume=new ArrayList<Integer>(); 169 170 Track(int Num){ 171 this.Num=Num; 172 Nt.add(new Note(0,0,0)); 173 } 174 void addNote(int Time,int Volume){ 175 int Delta=Nt.get(Nt.size()-1).getTime(); 176 Nt.add(new Note(Time,Volume,Time-Delta)); 177 } 178 179 ArrayList<Note> getNote(){ 180 return Nt; 181 } 182 183 void setVolume(int Delta){ 184 if(Nt.size()==1){ 185 return; 186 } 187 int J=1; 188 for(int i=0;true;i++){ 189 int Time=Delta*i; 190 if(Time>=Nt.get(Nt.size()-1).getTime()){ 191 break; 192 } 193 for(int j=J;j<Nt.size();j++){ 194 195 if(Time+Nt.get(1).getTime()==Nt.get(j).getTime()){ 196 Volume.add(Nt.get(j).getVolume()); 197 J=j+1; 198 break; 199 } 200 if(Time+Nt.get(1).getTime()<Nt.get(j).getTime()){ 201 J=j; 202 Volume.add(0); 203 break; 204 } 205 } 206 } 207 } 208 209 ArrayList<Integer> getVolume(){ 210 if(Volume.size()==0){ 211 return null; 212 } 213 else{ 214 return Volume; 215 } 216 } 217} 218 219***** 220//Note.java 221package MIDI; 222 223public class Note{ 224 private int Time; 225 private int Volume; 226 private int Delta; 227 Note(int Time,int Volume,int Delta){ 228 this.Time=Time; 229 this.Volume=Volume; 230 this.Delta=Delta; 231 } 232 233 int getTime(){ 234 return Time; 235 } 236 int getVolume(){ 237 return Volume; 238 } 239 int getDelta(){ 240 return Delta; 241 } 242} 243 244***** 245//Delta.java 246package MIDI; 247 248public class Delta{ 249 private int Delta; 250 private int Count; 251 Delta(int Delta){ 252 this.Delta=Delta; 253 Count=1; 254 } 255 256 int getDelta(){ //Deltaの値を返す 257 return Delta; 258 } 259 260 int getCount(){ //Countの値を返す 261 return Count; 262 } 263 void PlusCount(){ //Countの値を1増やす(インクリメント) 264 Count++; 265 } 266 267 268} 269

また、eclipseでの実行も試してみましたが以下のようなエラーを返されました。

「指定されたパスが見つかりません。」

イメージ説明

ちなみに、MIDIファイルとjavaファイルはそれぞれ

MIDIファイル:\プログラム\Input
javaファイル:\プログラム\src\MIDI

に入っています。

試したこと

eclipseで実行したところ、全てのjavaファイルに対してclassファイルが作成されました。また、全てのクラスをpublicにして実行してみたところ上述のエラーを返されました。

補足情報(FW/ツールのバージョンなど)

OS:Windows 10 64bit
使用ソフト:Visual Studio Code
コンパイル:コマンドプロンプト

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

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

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

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

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

mather

2018/11/09 12:17

全てのJavaファイルは同じディレクトリにありますか?
hangyo

2018/11/09 12:18

はい、同じディレクトリにあります。
mather

2018/11/09 12:34

javac MIDI/*.java としてみてもダメですか?
hangyo

2018/11/09 12:36

明日実行してみます。
yukkuri

2018/11/11 13:04

ここで言うことではないかもしれませんが、import MIDI.*; は同一パッケージなのでいらないかと。
hangyo

2018/11/12 05:08

>>matherさん ファイルが見つかりません:MIDI\*.java と出ました。
yukkuri

2018/11/12 07:18

そのパスにMIDIというフォルダはあります?そのフォルダに合わせないと意味ありません。
hangyo

2018/11/12 07:22

>>yukkuriさん C:\Users\(ユーザー名)\Desktop\(フォルダ名)\プログラム\src\MIDI ですのであります。
yukkuri

2018/11/13 07:39

eclipseなどのIDEにソースをコピーして、すべてビルドして実行してみてはいかがでしょう。
yukkuri

2018/11/17 07:48

正解にたどり着けていなくてすみません。そういえば、なぜMIDIMainクラスなどはpublicではないのでしょうか。
mather

2018/11/19 04:37

追記されたエラーに関してですが、クラスパスではなくて Input\Midi19.mid が無い、と言われてますよ
hangyo

2018/11/19 04:39

返信が遅れてすみません。publicが抜けていたので追加してみました。
hangyo

2018/11/19 04:44

>>matherさん MIDIファイルをInputディレクトリに入れようというメッセージなのでしょうか?
mather

2018/11/19 05:16

入れよう、というか、指定のMIDIファイルがInputフォルダに入ってる前提でプログラムが動作するはずですよね?それが入っていないですよ、というエラーです。コンパイルエラーではなく、実行時エラーです。
mather

2018/11/19 05:18

質問内容がすでにタイトルとは違ってきてますよね。コンパイルエラーが解決したのであればこの質問は解決済みにして、新しい質問を立てましょう。
hangyo

2018/11/19 05:34 編集

>>matherさん わかりました。後ほど新しく立てておきます。また、InputフォルダにはMIDIファイルが20個入っています。ですが入っていないと言われます…
guest

回答1

0

自己解決

質問内容がタイトルと違ってきたので、新しく質問を立てます。

投稿2018/11/19 07:02

hangyo

総合スコア12

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問