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

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

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

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

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Q&A

解決済

3回答

2218閲覧

switch文と引数

andersong

総合スコア7

Java

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

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

0グッド

0クリップ

投稿2020/08/03 06:01

編集2020/08/03 06:36

javaで予定を管理するシステムを作りたいのですが途中でうまくいきません
switch文のあたりがわからなく困っております
java初心者です
どなたか教えていただけないでしょうか。

発生している問題・エラーメッセージ

CalendarSystem.java:42: エラー: 不適合な型: String[]をintに変換できません:
switch(cmd) {
^
CalendarSystem.java:44: エラー: クラス CalendarSystemのメソッド addScheduleは指定された型に適用できません。
case "add":end_flag=true; addSchedule();break;
^
期待値: String[]
検出値: 引数がありません
理由: 実引数リストと仮引数リストの長さが異なります
CalendarSystem.java:45: エラー: クラス CalendarSystemのメソッド listSchedulesは指定された型に適用できません。
case "list":end_flag=true; listSchedules();break;
^
期待値: String[]
検出値: 引数がありません
理由: 実引数リストと仮引数リストの長さが異なります
エラー3個

該当のソースコード

java
ソースコード
import java.io.;
import java.util.
;
im

port java.text.*;

public class CalendarSystem {

public class Schedule {
private int sn;
private Date date;
private String content;

public Schedule (int s, String dt, String c) throws ParseException {
sn=s;
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd hh:mm");
date=sdf.parse(dt);
content=c;
}

public String toString() {
return String.format("%04d:%tY/%<tm/%<td %<tH:%<tM %s" ,sn,date,content);
}

}

private int last_sn;
private List<Schedule> sc_list;

public static void main (String[] args){
(new CalendarSystem() ).exec();

}

private void exec(){
initSystem();
boolean end_flag=false;
while(!end_flag){
String[] cmd=inputCommand();
switch(cmd) {
case "quit":end_flag=true; break;
case "add":end_flag=true; addSchedule();break;
case "list":end_flag=true; listSchedules();break;
default:
msg("コマンド"+cmd+"がわかりません。");
}
}
quitSystem();
}

private void initSystem(){
msg("*** 予定管理システムSP3へようこそ! ***");
last_sn=0;
sc_list=new ArrayList<Schedule>();

}

private void quitSystem(){
msg("バイバイ!、また使ってね");
}

private void msg(String m){
System.out.println(m);

}
private void msg0(String m){
System.out.print(m);

}

private String[] inputCommand(){
msg0("コマンドは?");
try{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String l=br.readLine();
return l.split(" ");
}catch(IOException e){}
String[] r={ "" };
return r;
}

private void addSchedule(String[] cmd){
if(cmd.length!=4){
msg("addコマンドの構文が不正です");
return;
}
try{
String d=cmd[1] +" "+cmd[2];
String c=cmd[3];
sc_list.add(new Schedule (++last_sn,d,c));
}catch (ParseException e){
msg("日付が不正です");
}
}

private void listSchedules(String[] cmd){
for(Schedule s:sc_list){
msg(" "+s);
}
}

}

試したこと

addScheduleにいろいろ渡しましたがうまくいきませんでした
またおそらくcase文も間違っていると思います
ここができなくては先に進めないのでどうかソースコードをよろしくお願いします

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

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

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

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

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

maisumakun

2020/08/03 06:07

Javaのバージョンはいくつですか?
andersong

2020/08/03 06:09

11.7です 一応このバージョンでもできるといわれました
andersong

2020/08/03 06:11

失礼しました 11.0.7でした
guest

回答3

0

ベストアンサー

switchに指定できるのは、intやStringやenum型です。
cmdはStringの配列型であるため、switchに指定できません。

投稿2020/08/03 06:10

swordone

総合スコア20651

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

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

andersong

2020/08/03 06:14

回答ありがとうございます できたら具体的なソースコードを書いていただけたら助かります どのように書けば指定できるのでしょうか
swordone

2020/08/03 06:47

何で分岐するのか? それに尽きます。
andersong

2020/08/03 07:06

private void exec(){ initSystem(); boolean end_flag=false; while(!end_flag){ String[] cmd=inputCommand(); switch(cmd) { case "quit":end_flag=true; break; case "add":end_flag=true; addSchedule();break; case "list":end_flag=true; listSchedules();break; default: msg("コマンド"+cmd+"がわかりません。"); } } quitSystem(); } のString[]をStringに変えたのですができませんでした。 他にも二日ほど考えて試行錯誤しましたのですがわからないのです。 ソースコードを書いてもらえたらありがたいです。よろしくお願いいたします。
swordone

2020/08/03 19:02

やみくもにコードを書かれても、またコードを要求されても、 あなたがどんな入力をしようとしていて、それに対してどんな結果が得たいかわからない以上、何も言えません。 inputCommandメソッドで入力を空白区切りで得ようとしていることはわかるのですが、何が入力されるかがわかりません。
guest

0

多分switch(cmd)じゃなくてswitch(cmd[0])
add/listScheduleについてはエラーの通り引数を渡す

投稿2020/08/03 07:43

ozwk

総合スコア13521

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

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

0

String[]Stringに変えるのは、全部繋げばできますが、わざわざsplitしてるのだから、それが望みではないですよね?
受け取った複数のStringに対して、どのような処理を行いたいのか?
まずはそこをはっきりさせないことには、きちんとしたコードにはなりません。
どんなものを受け取って、どんな処理(分岐)を行う想定なのでしょうか?

投稿2020/08/03 07:37

amiya

総合スコア1218

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

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

andersong

2020/08/03 07:42

addScheduleで予定を登録して listSchedulesで予定を表示して quitで終わり という風にしたいのです
amiya

2020/08/03 07:51

そうではなく、どのような入力を想定ていて、それに対してどのような分岐を行いたいのか?です。 (でも、なんか先に進んだみたいですね)
andersong

2020/08/04 18:31

みなさんありがとうございました。 先に進むことができました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問