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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

2回答

480閲覧

Javaのエラー どこが間違ってますか

yuuri

総合スコア6

Java

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/11/14 07:24

###前提・実現したいこと
senbatsuの表のMonth Dayの列の値をみて行を選んでかに、さそり、うお座を選ぶプログラムを完成させたいです。どのように変えたら良いでしょうか教えてください。

###発生している問題・エラーメッセージ
エラーメッセージ
AKB.java:56:エラー:解析中にファイルの終わりに移りました
}^
エラー 1個
###該当のソースコード
class AKB {
public static void main(String[] args){
String[][] senbatsu = {
{"Name","BloodType","Year","Month","Day","HomeTown","Team"},
{"Sashihara Rino","O","1992","11","21","Oita","HKT48H"},
{"Kashiwagi Yuki","B","1991","7","15","Kagoshima","AKB48B"},
{"Watanabe Mayu","AB","1994","3","26","Saitama","AKB48B"},
{"Takahashi Minami","AB","1991","4","8","Tokyo","AKB48A"},
{"Matsui Jurina","B","1997","3","56:8","Aichi","SKE48S"},
{"Yamamoto Sayaka","B","1993","7","14","Osaka","NMB48N"},
{"Miyawaki Sakura","A","1998","3","19","Kagoshima","HKT48KIV"},
{"Miyazawa Sae","O","1990","8","13","Tokyo","SNH48SII"},
{"Shimazaki Haruka","A","1994","3","30","Saitama","AKB48A"},
{"Yokoyama Yui","B","1992","12","8","Kyoto","AKB48A"},
{"Kitahara Rie","A","1991","6","24","Aichi","NGT48"},
{"Watanabe Miyuki","B","1993","9","19","Nara","NMB48BII"},
{"Matsumura Kaori","O","1990","1","17","Saitama","SKE48KII"},
{"Takayanagi Akane","B","1991","11","29","Aichi","SKE48KII"},
{"Shibata Aya","B","1993","4","1","Aichi","SKE48E"},
{"Muto Tomu","B","1994","11","25","Tokyo","AKB48K"}
};
int i,j;
for(i=1;i<senbatsu.length;i++){
m = Integer.parseInt(senbatsu[i][6]);
d = Integer.parseInt(senbatsu[i][7]);
if((m == 6 && d >= 22) || (m == 7 && d <= 22)){
System.out.print(senbatsu[i][0]);
for(j=1;j<senbatsu[i].length;j++){
System.out.print(","+senbatsu[i][j]);
}
System.out.print("");
}
}
for(i=1;i<senbatsu.length;i++){
f = Integer.parseInt(senbatsu[i][10]);
g = Integer.parseInt(senbatsu[i][11]);
if((f == 10 && g >= 24) || (f == 11 && g <= 21)){
System.out.print(senbatsu[i][0]);
for(j=1;j<senbatsu[i].length;j++){
System.out.print(","+senbatsu[i][j]);
}
System.out.print("");
}
}
for(i=1;i<senbatsu.length;i++){
h = Integer.parseInt(senbatsu[i][2]);
j = Integer.parseInt(senbatsu[i][3]);
if((h == 2 && j >= 19) || (h == 3 && j <= 22)){
System.out.print(senbatsu[i][0]);
for(j=1;j<senbatsu[i].length;j++){
System.out.print(","+senbatsu[i][j]);
}
System.out.print("");
}
}
}

###試したこと
}の数を変えて試しましたが解決できませんでした」

###補足情報(言語/FW/ツール等のバージョンなど)
Java

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

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

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

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

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

guest

回答2

0

{}の数が足りない以外にも問題だらけなので補足して突っ込んでおきます。

どこを参照している?

Java

1m = Integer.parseInt(senbatsu[i][6]); 2d = Integer.parseInt(senbatsu[i][7]); 3 4f = Integer.parseInt(senbatsu[i][10]); 5g = Integer.parseInt(senbatsu[i][11]); 6 7h = Integer.parseInt(senbatsu[i][2]); 8j = Integer.parseInt(senbatsu[i][3]);

このコードですが、senbatsuのデータは7x17のデータなので、第一階層の配列の添字は6までしかありません。コードの意図的に、このm,dはMonth、Dayなので、正しくはこうなるはずです。

Java

1m = Integer.parseInt(senbatsu[i][3]); 2d = Integer.parseInt(senbatsu[i][4]); 3 4f = Integer.parseInt(senbatsu[i][3]); 5g = Integer.parseInt(senbatsu[i][4]); 6 7h = Integer.parseInt(senbatsu[i][3]); 8j = Integer.parseInt(senbatsu[i][4]);

jが再利用されている

うお座のチェックのためにh,jにMonthとDayを入れていますが、直後のjを使ったfor文で再利用されています。いまのところこのコードであれば動作しますが、このように「適当な名前で一時変数を作って使っていると、思わぬところで間違って値を上書きする」ということが起きます。f,g,h,jは意味的にm,dと同じなので、m,dに置き換えてしまうほうがよいです。

System.out.print("")は無意味

多分改行するためにSystem.out.println("")をしているのでしょうが、lnが抜けているので空文字を末尾に足すだけの無意味な処理になっています。

Dayに56:8という無効なデータがある

このような値をInteger.parseIntにかけるとエラーでコケます。

メソッド化すべき

星座の判定のための処理、及び該当の人物の出力処理は、かに、さそり、うおで日付が違うだけで全く同じ形をしています。であればメソッド化して再利用するべきです。

投稿2017/11/14 07:48

masaya_ohashi

総合スコア9206

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

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

0

それでもやはり括弧が足りないようです。
インデントを揃えて書くようにすれば、このような問題は生じないのですが...

Java

1class AKB { 2 public static void main(String[] args){ 3 String[][] senbatsu = { 4 {"Name","BloodType","Year","Month","Day","HomeTown","Team"}, 5 {"Sashihara Rino","O","1992","11","21","Oita","HKT48H"}, 6 {"Kashiwagi Yuki","B","1991","7","15","Kagoshima","AKB48B"}, 7 {"Watanabe Mayu","AB","1994","3","26","Saitama","AKB48B"}, 8 {"Takahashi Minami","AB","1991","4","8","Tokyo","AKB48A"}, 9 {"Matsui Jurina","B","1997","3","56:8","Aichi","SKE48S"}, 10 {"Yamamoto Sayaka","B","1993","7","14","Osaka","NMB48N"}, 11 {"Miyawaki Sakura","A","1998","3","19","Kagoshima","HKT48KIV"}, 12 {"Miyazawa Sae","O","1990","8","13","Tokyo","SNH48SII"}, 13 {"Shimazaki Haruka","A","1994","3","30","Saitama","AKB48A"}, 14 {"Yokoyama Yui","B","1992","12","8","Kyoto","AKB48A"}, 15 {"Kitahara Rie","A","1991","6","24","Aichi","NGT48"}, 16 {"Watanabe Miyuki","B","1993","9","19","Nara","NMB48BII"}, 17 {"Matsumura Kaori","O","1990","1","17","Saitama","SKE48KII"}, 18 {"Takayanagi Akane","B","1991","11","29","Aichi","SKE48KII"}, 19 {"Shibata Aya","B","1993","4","1","Aichi","SKE48E"}, 20 {"Muto Tomu","B","1994","11","25","Tokyo","AKB48K"} 21 }; 22 int i,j; 23 for(i=1;i<senbatsu.length;i++){ 24 m = Integer.parseInt(senbatsu[i][6]); 25 d = Integer.parseInt(senbatsu[i][7]); 26 if((m == 6 && d >= 22) || (m == 7 && d <= 22)){ 27 System.out.print(senbatsu[i][0]); 28 for(j=1;j<senbatsu[i].length;j++){ 29 System.out.print(","+senbatsu[i][j]); 30 } 31 System.out.print(""); 32 } 33 } 34 for(i=1;i<senbatsu.length;i++){ 35 f = Integer.parseInt(senbatsu[i][10]); 36 g = Integer.parseInt(senbatsu[i][11]); 37 if((f == 10 && g >= 24) || (f == 11 && g <= 21)){ 38 System.out.print(senbatsu[i][0]); 39 for(j=1;j<senbatsu[i].length;j++){ 40 System.out.print(","+senbatsu[i][j]); 41 } 42 System.out.print(""); 43 } 44 } 45 for(i=1;i<senbatsu.length;i++){ 46 h = Integer.parseInt(senbatsu[i][2]); 47 j = Integer.parseInt(senbatsu[i][3]); 48 if((h == 2 && j >= 19) || (h == 3 && j <= 22)){ 49 System.out.print(senbatsu[i][0]); 50 for(j=1;j<senbatsu[i].length;j++){ 51 System.out.print(","+senbatsu[i][j]); 52 } 53 System.out.print(""); 54 } 55 } 56 }

teratailには、上記のようにコードを見やすく表示する機能があります。
質問編集画面を開き、コードを選択した状態で<code>ボタンを押してください。

投稿2017/11/14 07:31

LouiS0616

総合スコア35660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問