Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

コマンドライン引数とswitch文を使って・・・・

コマンドライン引数とswitch文を合わせて
計算式を作りたいのですがどうすればいいでしょうか?
一応、Integer型でargs[0][2]にvalue1・value2が
char型でargs[1]に格納されて定義されます。
int型で「answer=0」と定義され
そして結果には「答えはanswerです」と表示されます

15

回答

4577

閲覧

15件の回答

評価

0

まずはセンセが指定している教科書を熟読しましょう。

評価

0

args[0][2]なんて書くから混乱しちゃったよ。
args[0]、args[2]でOK?

評価

0

そうでした。
すいません

評価

0

コマンドライン引数にはStringの配列しか使えないから、Integer型とかchar型ってのは使えないよ。
多分、String型配列に入ったデータをそのように変換しろ、ってことだと思う。
まず、「何をするか」というのをもっと具体的に考えたほうがいいよ。
あなたの書いたそれは、全然説明になってませんし、何を教えて欲しいのかも分かりません。

評価

0

「switch文とコマンドライン引数で計算式が出来るプログラム」ということです。
プログラムを実行するときに引数を指定して
結果が「答えはanswerです」となるようにしたいのですがswitch文のところで手間取ってる状況です。
int value1=Integer.parseInt(args[0]);
int value2=Integer.parseInt(args[2]);
char kigou = args[1].charAt(0);
int answer=0;
がまず設定されており
次のswitch文で
switch(args[1].charAt(0)){
case 1:
    System.out.print("args[0]");
case 2:
    System.out.print("args[1]");
case 3:
    System.out.print("args[2]");
    break;
と作ってみましたが「こたえは0です」となりました

評価

0

case 1:...
case 2:...
case 3:...

では何をしようとしています?
charAtで返ってくるのは文字型ですから、
case '何かの文字':...
のようにするのが普通です。

また、
switch(args[1].charAt(0)){
と書いていますが、これはkigouそのものですよね。
switch (kigou) {
でいいです。

他に、breakに対する理解も甘いような気もします。
とりあえずはこれくらいです。

評価

0

public class Foo {
  public static enum Operators {
    ADD('+') {
      int calc(int a, int b) { return a + b; }
    },
    SUB('-') {
      int calc(int a, int b) { return a - b; }
    },
    MUL('*') {
      int calc(int a, int b) { return a * b; }
    },
    DIV('/') {
      int calc(int a, int b) { return a / b; }
    };
    abstract int calc(int a, int b);
    
    private final char op;
    private Operators(char op) { this.op = op; }
    
    public static Operators valueOf(char op) {
      for (Operators o : values()) {
        if (o.op == op) return o;
      }
      throw new IllegalArgumentException(op + " is illegal operation.");
    }
  }
  
  public static void main(String...args) {
    Integer a   = Integer.valueOf(args[0]);
    char op     = args[1].charAt(0);
    Integer b   = Integer.valueOf(args[2]);
    
    int answer = Operators.valueOf(op).calc(a, b);
    System.out.println("答えは" + answer + "です");
  }
}

評価

0

とはいっても、前に
case value1など打ってみましたが
エラーが出てしまって
あかんと思っています。
余談ですけど、エクリプスで作成しました

評価

0

それでは答えになっていません。
あなたはswitch文でどのような処理がしたいのか、と聞いているのですよ。

評価

0

そもそも、
case value1とかけなんていってませんよ。
switch文だけでなく、型に関する理解も足りていないようですから、そこらへんもきちんと勉強しましょう。

評価

0

ここまで来たら誰もあなたがやってほしいことに
ついて想像するしかありません。
本を読んでいるのか宿題かわかりませんが、
まずは問題をそのまま載せてみてください。
(そのあともツコミはあるかも知れませんが…。)

評価

0

何がしたいですか。
とりあえずは、エクリプスで実行するときに
args[0]args[1]aegs[2]に数字と文字を入力し
計算をするソースを入れたいです
それをanswerに格納して画面出力したいですね。
それと問題は
「コマンドライン引数とswitch文を使って計算をする
 ソースを作成せよ。
 なお、value1とvalue2はargs[0]とargs[2]に
  kigouはargs[1]に格納するものとする」

評価

0

何がしたいかって、そんなことを聞いてるんじゃないんだよ。
「switch文でしたい処理」を聞いているんだよ。
ここに躓いているわけでしょ?
この問題の答をそのままもらいたいわけじゃないんでしょ?

評価

0

グル君さんは、
どのようにすればプログラムが完成すると思っているのですか?
まずはフローチャートを作成してみましょう。

もし、フローチャートを作成しているのなら申し訳ないです。

switch文を使うのであれば、
文法をもう一度勉強した方いいですよ。
前にも述べられた方がいますが、
breakの使い方とcaseの後が間違っています。
また、case文の中も、それではargsの中身を表示しているだけにすぎません。

評価

0

まずはここ↓を見ましょう。
http://www.javaroad.jp/java_control2.htm
ここをみて、switch文に関して理解しましょう。

その説明中に、「switch文は整数型の値しか判断基準とできない」とあります。

あと、「breakがない場合、case文を実行した後でもswitch文全体の処理から抜け出ず、次のcase値の判定を行います。」と書いてあります。
その上で、グル君さんが書いたコードを改めてみてみます。(一部補正)
int answer=0;
switch(args[1].charAt(0)){
case 1:
    System.out.print("args[0]");
case 2:
    System.out.print("args[1]");
case 3:
    System.out.print("args[2]");
    break;
}

switch(args[1].charAt(0))の値が仮に"-"だとすると、どれにも当てはまりません。
そのため、どれも実行されないことになります。
つまり、answerの値はなにも変わらないし、画面上には何も表示もされませんね。(System.out.print〜がcaseに当てはまらないので実行されない)

もう一つ。
> とはいっても、前に
> case value1など打ってみましたが
> エラーが出てしまって
> あかんと思っています。
と書かれていますが、当たり前です。
value1は変数ですよね?
先ほどのswitch文の説明中に「caseコマンドの値には定数もしくは定数を返す式を記載します。値が一定でない変数を記載することはできません。」と書かれている通り、「case」には、定数となるものを書かなければなりません。

とりあえず、switch〜case文の文法と、動作について改めて理解する必要があります。

キーワード:
switch、case、break、default、評価式、値

理解が出来れば、
「Integer型変数の値によって、画面に以下の内容を出力するソースを作成せよ。ただし、条件分岐にはswitch文を使うこと。また、switch文の中で出力するのではなく、switch文の外で出力するよう工夫をしなさい。
変数の値と出力内容
1の時、「1月は睦月です」
2の時、「2月は如月です」
3の時、「3月は弥生です」
4の時、「4月は卯月です」
5の時、「5月は皐月です」
6の時、「6月は水無月です」
7の時、「7月は文月です」
8の時、「8月は葉月です」
9の時、「9月は長月です」
10の時、「10月は神無月です」
11の時、「11月は霜月です」
12の時、「12月は師走です」
それ以外の時、「1〜12の間で指定してください」」

という問題が出ても、見事に解決できると思います。
(解決できれば、やろうとしている元の問題をとくための練習にもなると思います。)

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。