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

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

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

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

Q&A

解決済

5回答

2413閲覧

【Java】メソッドを作成し戻り値を使って条件分岐する【引数と戻り値】

nitta_komachi

総合スコア8

Java

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

0グッド

0クリップ

投稿2020/02/20 07:44

前提・実現したいこと

最近Javaを学び始めた初心者です。ご教授お願い致します。

【問】
変数 int num にシステムから入力値が与えられます。
下記のメソッドを作成してください
メソッドを作成したら、mainにてそのメソッドを呼出し、下記の条件分岐を実装してください。
なお、メソッドの呼び出し時の実引数は、入力値である変数 int num を設定してください。

calculationメソッド
0から数値型の引数までの数値の和を戻り値としてください。

mainメソッドでの条件分岐
戻り値が200以上の場合、「200以上です」と出力。
戻り値が100以上200未満の場合、「100以上200未満です」と出力。
戻り値が100未満の場合、「100未満です」と出力。
戻り値が0以下の場合、「数値が不正です」と出力。

下記のコードで実行して表示されるのは「100未満です 数値が不正です 数値が不正です 数値が不正です」
でした。与えられている数値は「1、18、20、-1」です。

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

正しい計算がmainメソッドに戻っていないか、 mainメソッド内の式が間違っているのか

該当のソースコード

import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String text = scan.next(); int num = Integer.parseInt(text); int total = caluculation(num); //メソッドの呼び出し //caluclarionにtotalに代入 if(total>=200){ System.out.print("200以上です"); //戻り値が200以上の場合、「200以上です」と出力 }else if(100<=total && total>200){ System.out.print("100以上200未満です"); //戻り値が100以上200未満の場合、「100以上200未満です」と出力 }else if(0<total && total<100){ System.out.print("100未満です"); //戻り値が100未満の場合、「100未満です」と出力 }else if(total<0){ System.out.print("数値が不正です"); //戻り値が0以下の場合、「数値が不正です」と出力。 } } static int caluculation(int num){ for(int i=0;i<num;i++){ num =num+i; } return num; } }

試したこと

caliculationメソッド内の式をiを1にしてみたり、numを変えてみたりしましたが改善せず。
上の演算式に間違いがあるのか何度も見直しましたが自分自身では気が付きませんでした。
1時間以上も躓いてしまったのでご教授お願い致します。

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

Java、Windows10を使用しております。質問の意味が違っていたら申し訳ございません

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

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

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

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

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

riko111

2020/02/20 07:53

> 正しい計算がmainメソッドに戻っていないか、 > mainメソッド内の式が間違っているのか テキストエディタ+コマンドプロンプトの開発環境で上記を確認したいのなら、if文の前に System.out.println("totla=" + total); を書いてみればよいのでは?
退会済みユーザー

退会済みユーザー

2020/02/20 08:02

jdbでいいじゃろ→コマンドでのデバッグ
momon-ga

2020/02/20 10:32 編集

> 0から数値型の引数までの数値の和を戻り値としてください。 ですが、引数が負数の場合、戻り値は負数になりますか? たとえば、引数が-3の場合、0、-1、-2、-3の合計の-6でしょうか? それとも、単純に0を返せばいいですか?それとも、合計せずに-3を返す?
guest

回答5

0

java

1 for(int i=0;i<num;i++){ 2 num =num+i; 3 } 4

ここで比較対象(num)を加算しているので終わらない。

java

1 int lim= num; 2 for(int i=0;i<lim;i++){ 3 num =num+i; 4 }

とかすれば?

投稿2020/02/20 08:04

cateye

総合スコア6851

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

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

nitta_komachi

2020/02/21 06:54

回答ありがとうございます。確かにfor文の公式?として間違えておりました… ご指摘された通り変数にnumをいれ式を作成したところクリア致しました。 本当にありがとうございました。
guest

0

100<=total && total>200

100以上で200より大きい
になってます。

可読性の問題ですが、比較での条件式で
変数の位置は左辺なら全て左辺、右辺なら全て右辺に揃えた方が間違えにくくなると思います。

投稿2020/02/20 07:54

編集2020/02/20 07:58
m.ts10806

総合スコア80852

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

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

m.ts10806

2020/02/20 07:56

0 の場合はなにもでない気が
nitta_komachi

2020/02/21 06:48

回答ありがとうございます。確かに見直してみると変な指揮を書いておりました…。 他の人にも見せられるような見やすいものを作るという事を念頭にコードを書くよう心掛けます! あと、仰ったとおり }else if(0<=total && total<100){ というコードを書いてみて、0の時も表示できるようになりました。ありがとうございます!
guest

0

ベストアンサー

①以下と未満の使い分けが正しくない
以下:total <= 数字
未満:total < 数字

②最後に、引数の数字も足す必要がある
for(int i=0;i<num;i++){
ではなく
for(int i=0;i<=num;i++){
だと思います

③引数のnumに手を加えたくない
forの前に新しい変数作ってそこに足していって返してあげた方がいいです

【補足】
if文の最後はelseがベターだと思います
else ifが多い場合はswitch文を使うことを考えてもいいと思います
System.out.printlnだと最後に改行つけてくれます

投稿2020/02/20 08:15

oec

総合スコア271

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

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

LouiS0616

2020/02/21 02:39

比較をswitch文で簡潔に書く方法を知らないのですが、どのようにすれば良いのでしょうか。
oec

2020/02/21 02:52

人によって好みであったり、プロジェクトのルールによって使えない場合もありますが switch(true){ case x<2: . . . } という感じです。
oec

2020/02/21 03:06

わ、動作確認してなくてごめんなさい。 そして確認ありがとうございます。Javaではできないんですね。 Javascriptとx++では使ったことがあります。 ちょっと古いですが、こんな記事みつけました。面白いですね。 https://qiita.com/khsk/items/90f07f8bfeeb66cbaf32
LouiS0616

2020/02/21 03:28

JavaScriptやPHPはほとんど触ったことが無いのですが、このようなイディオムが(好みが分かれるにせよ)あるのですね。 goto論争に近いものを感じます。非常に強力で、さらに明確な意味合いを持っている、あるいは持たせることができるけれど、使い方を一つ誤るとバグの温床になるということ。 switch文のフォールスルーを充分活かせる処理なのであれば個人的にはアリかなと思いました。
nitta_komachi

2020/02/21 06:59

回答ありがとうございます。 おかげさまで100以上200未満ですを表示する式がおかしいことに気が付きました! for文の前に変数を宣言し int sum=num; for(int i=0;i<sum;i++){ num =num+i; } このような処理を打ち込んだところ解決いたしました! あと皆様の文を読んでなるほど…と思うことがあり、これからも必死に勉強していきたいと思います。 本当にありがとうございました!
guest

0

calculationメソッド

0から数値型の引数までの数値の和を戻り値としてください。

java

1 static int caluculation(int num){ 2 for(int i=0;i<num;i++){ 3 num =num+i; 4 } 5 return num; 6 }

どう考えてもこれはおかしい。

投稿2020/02/20 07:56

swordone

総合スコア20651

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

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

0

なかなか難しい問題ですね、これでどうでしょう?

Java

1package testJava; 2 3import java.util.Scanner; 4 5public class Main { 6 7 public static void main(String[] args) { 8 Scanner scan = new Scanner(System.in); 9 String text = scan.next(); 10 int num = 0; 11 scan.close(); 12 try { 13 num = Integer.parseInt(text); 14 } catch (NumberFormatException e) { 15 System.out.println("入力値が不正です。整数を入力してください。"); 16 System.exit(-1); 17 } 18 19 int total = caluculation(num); 20 21 //System.out.println("デバック用ログ・トータル:" + total); 22 23 //メソッドの呼び出し 24 //caluclarionにtotalに代入 25 26 if (total >= 200) { 27 System.out.print("200以上です"); 28 //戻り値が200以上の場合、「200以上です」と出力 29 } else if (total >= 100) { 30 System.out.print("100以上200未満です"); 31 //戻り値が100以上200未満の場合、「100以上200未満です」と出力 32 } else if (total >= 0) { 33 System.out.print("100未満です"); 34 //戻り値が100未満の場合、「100未満です」と出力 35 } else { 36 System.out.print("数値が不正です"); 37 //戻り値が0以下の場合、「数値が不正です」と出力。 38 } 39 } 40 41 static int caluculation(int num) { 42 int returnNum = 0; 43 for (int i = 0; i <= Math.abs(num); i++) { 44 returnNum += i; 45 } 46 if (num < 0) { 47 return -returnNum; 48 } 49 return returnNum; 50 } 51 52} 53

投稿2020/02/20 16:18

junzi

総合スコア279

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

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

momon-ga

2020/02/21 02:35

> 戻り値が0以下の場合、「数値が不正です」と出力。 おしいなぁ。0の場合は?
junzi

2020/02/22 06:00

レビューありがとうございます、テストが足りていませんでした。。 total > 0で「数値が不正です」ですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問