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

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

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

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

Q&A

4回答

2581閲覧

Javaの条件分岐 問題

yk-211

総合スコア34

Java

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

0グッド

0クリップ

投稿2015/05/18 07:23

処理内容
引数1 計算方法(1足し算 2引き算 3掛け算 4割り算)
引数2 int xへ代入
引数3 int yへ代入
で実行しコンソールに計算結果を表示する。

エラー出力
計算結果が1~4を指定されていない場合はコンソールに計算方法の指定が誤っていますと表示する
4:割り算で割り切れない場合は商とあまりをコンソールに表示する
引数が3つでない場合はコンソールに引数が誤っていますと表示する
引数2と引数3が数字でない場合はコンソールに数字を入力してくださいと表示する


引数3までのコーディングとエラー出力の1番上はこれで出来ると思うのですが、
それ以外の部分のコーディングがさっぱりです。
現在コーディングしている部分もあやふやですが、見ていただけないでしょうか。
よろしくお願いいたします。

package test;
import java. io.*;

class Mondai8{
public static void main(String args[])throws IOException{
int num = Integer.parseInt(args[0]);
switch(num){
case 1: System.out.println("足し算");
break;
case 2: System.out.println("引き算");
break;
case 3: System.out.println("掛け算");
break;
case 4: System.out.println("割り算");
break;
default: System.out.println("計算方法の指定が誤っています。");
}
BufferedReader a = new BufferedReader(new InputStreamReader(System.in));
System.out.println("x=");
int x,y;
x=Integer.parseInt(a.readLine());
System.out.println("y=");
y=Integer.parseInt(a.readLine());
}
}


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

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

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

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

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

guest

回答4

0

1.引数から値を受け取ると問題にあるので
以下のように実行することになります。

> Mondai8 AAA BBB CCC

すると引数argsに以下のように文字列配列の要素として入ります
args[0] = "AAA"
args[1] = "BBB"
args[2] = "CCC"
(今回の場合"AAA","BBB","CCC"のところに数字を入れて使用します)

配列の長さは指定した引数より長くはならないので
配列の長さを調べれば引数の数がわかります。

2.> int num = Integer.parseInt(args[0]);
いきなり上の処理をしてしまうと引数の1番目に数字が入っていない場合(+とか-とか)に
例外が発生してしまうので、
例外処理(try-catch)の中で行うか
args[0]はintに変換しないで文字列のままswitchやifで比較する必要があります。

3.引数2と引数3が数字でない場合の対応は例外処理(try-catch)を調べてください。

※問題文には割り切れない場合は商と余りを表示するとありますので、
余りが0かそれ以外かで余りを表示するかしないかの分岐がいるのではないでしょうか?

投稿2015/05/18 10:34

kutsulog

総合スコア985

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

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

yk-211

2015/05/19 00:10

回答ありがとうございます。 まだ分かっていない部分があり、もうちょっと考えてみます。 ありがとうございます。
guest

0

エラーの1番目と4番目をチェックするのに以下のようなメソッドを用意してみてはいかがでしょうか。
(パパッと書いたので構文間違えてるかもしれませんが。)

lang

1private int parseInt(int num, boolean operatorFlag){ 2 int ret = 0; 3 try { 4 ret = Integer.parseInt(num); 5 if ( operatorFlag ) { 6 if ( ret<1 || ret>4 ){ 7 throw new Exception("計算方法の指定が誤っています"); 8 } 9 } 10 } catch (NumberFormatException e) { 11 if ( operatorFlag ) { 12 throw new Exception("計算方法の指定が誤っています"); 13 } else { 14 throw new Exception("数字を入力してください"); 15 } 16 } 17 18 return ret; 19}

使い方は、以下の通りです。

lang

1int operator; 2int x; 3int y; 4 5try{ 6 operator = parseInt(args[0], true); 7 x = parseInt(args[1], false); 8 y = parseInt(args[2], false); 9} catch (Exception e) { 10 System.out.println(e.getMessage()); 11}

投稿2015/05/18 07:59

runun

総合スコア305

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

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

yk-211

2015/05/19 00:12

回答ありがとうございます。 try catch を使えばよいことは分かったのですが、 なかなかどう使っていいかが分かりません。 考えてみます。 ありがとうございます。
guest

0

mainメソッドの引数で、実行時の引数argsを受け取っているので、
BufferedReaderを使う必要ないです。
なので、throws IOException も不要です。

まず、引数のエラーチェックをして、
全て正常であれば、switch(num){} に処理をすすめるようにしたらいいと思いますよ。

余りを算出するには「%」を使います。

投稿2015/05/18 07:46

kaputaros

総合スコア1844

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

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

yk-211

2015/05/19 00:13

回答ありがとうございます。 確かにそうですね。いわれて気づきました! もう少し考えてみます。
guest

0

lang

1int num = Integer.parseInt(args[0]);

この書き方をしているということは,引数は実行時引数として渡されるということですね?
実行時引数は,実行時にjavaクラスの指定とともに渡される文字列で,
通常スペースで要素に区切られ配列化し,args[]に渡されます.
「引数が3つ」ということは,args.length = 3である,ということです.
これを使えば,「引数が3つでないときにコンソールに文字列を表示する」が実現できます.
また,このコードと同じように2番目(args[1])や3番目(args[2])もint型の数に変換します.
この時,int型に変換できない文字列(数字じゃない文字や小数,int型で表現できない数)が渡された時,このメソッドは例外(NumberFormatException)を発生させます
この例外をcatchで処理することで,「数字でない場合にメッセージ表示」もクリアできます.
この処理をswitchの前で行うことで,1番目の引数で指定された計算方法で,2番目と3番目の数値を計算することができるはずです.

投稿2015/05/18 07:42

編集2015/05/18 07:44
swordone

総合スコア20649

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

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

yk-211

2015/05/18 07:59

お2人とも回答をありがとうございます。 if(num== 1){ System.out.println(x+y); }else if(num==2){ System.out.println(x-y); }else if(num==3){ System.out.println(x*y); }else { System.out.println("商は"+x/y); System.out.println("余りは"+x%y); の部分を加えましたので、あとはエラー出力の下2つ部分です。 回答を見てもまだピンと来ていませんので、ちょっとやってみたいと思います。 ありがとうございます。
swordone

2015/05/18 08:19

なぜswitchからifにしたのか謎ですが・・・ 配列.lengthはその配列の長さを表します. argsの場合,実行時に渡された引数の数がそのまま配列の長さになるので, args.lengthをチェックすることで「引数の数」をプログラムから見ることができます. この数値を基準に条件分岐すればいいのです.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問