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

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

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

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

Q&A

解決済

3回答

7191閲覧

ループ文を使った足し算がうまくいきません。

chi_yan

総合スコア11

Java

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

0グッド

0クリップ

投稿2016/09/20 04:57

###前提・実現したいこと
下記の2点を満たす足し算ができるアプリケーションを作成しています。

  1. アプリケーションからはExceptionを投げさせない構造に変更する。
    ・main関数のthrow Exceptionを消す。
    ・不正な文字が入った時に、不正な文字と判断して、その旨のメッセージを出力させる。
  2. 3つの数字を入れられるように。
    ・ループ分を使って。

3つの数字を入れるループ文はうまくいったのですが、
計算がうまくいきません。
アドバイスを頂ければ幸いです。

###該当のソースコード
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

class java_kadai2_2
{
public static void main(String[] args)
{
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));

String str1 = ""; String str2 = ""; String str3 = ""; try { //キーボードから任意の1つ目の数字を打ち込む for( int i = 0; i < 3; i++ ){ System.out.print("値を入力して下さい>"); str1 = br.readLine(); } } catch (IOException ex){ System.out.println("数字読み込みを失敗しました。"); return; } int num1; int num2; int num3; try { //str1,str2を数値の変換し、変数num1,num2へ代入 num1=Integer.parseInt(str1); num2=Integer.parseInt(str2); num3=Integer.parseInt(str3); } catch (NumberFormatException ex){ System.out.println("int型への変換に失敗しました。" ); return; } //四則演算を行う int sum=num1+num2+num3; //四則演算の結果をそれぞれ表示 System.out.println(str1 + "+" + str2 +"=" + sum);

}
}

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

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

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

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

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

guest

回答3

0

for ループを使うのだから、入力した文字列を配列にします。

Java

1String[] strs = new String[3]; 2for (int i=0; i<3; i++) { 3 strs[i] = br.readLIne(); 4}

同じように計算もfor ループを使ってみてください。

投稿2016/09/20 06:55

yskz44

総合スコア100

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

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

chi_yan

2016/09/20 07:34

ご回答ありがとうございます。 下記のように計算の部分にもループ文を使いましたが、 エラーが出ます、、なぜでしょうか。。 int sum = 0; for (int i=0; i<3; i++) { strs[i] = br.readLine(); sum += i;
yskz44

2016/09/20 09:27

エラーの内容がないとわかりませんが、NumberFormatException なら 整数以外の文字列を入力しているからです。元のソースのように try ... catch で囲む必要があります。 sum += i; ではなく sum += Interfer.parseInt(strs[i]); としないと意味がないですよ。
guest

0

数値入力の部分ですが、すべてstr1に設定されてしまい、str2とstr3が空の状態です。
また、str1も1つ目と2つ目の入力のものが上書きで消されてしまい、3つ目に入力したものだけが残っている状態になります。
まずは、3つの数値が保持できるようにした方がいいと思います。

投稿2016/09/20 05:14

archiver

総合スコア1557

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

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

chi_yan

2016/09/20 07:22

ご回答ありがとうございます。 3つの数値が保持されていないということだったんですね。。 納得しました。
guest

0

ベストアンサー

for文の中に
str1 = br.readLine();
しかいません。

毎回str1に打ち込んだ数字を上書きで入れているだけですので、最後にキータイプした数字が出力されていると思います
str1の1をiに変えてやってみると良いと思います。
具体的には、配列というものを使用してみると良いです。
一番簡単なJava
このリンクが参考になります。

そうですね、取り急ぎ数字の計算をするという点では、次の方が記載している通り、
str2とstr3を追加してやってみるというのが、最速です。
配列については、今後絶対に必要になる要素ですので、この問題が解決したら挑戦してみてください

投稿2016/09/20 05:08

編集2016/09/20 05:22
kpiyohiko

総合スコア658

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

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

chi_yan

2016/09/20 06:30

ご回答頂き、ありがとうございます。 まずはstr2,str3を追加してやってみましたが、 計算がうまくいかず、”数字読み込みに失敗しました。”の表示が出てしまいます。 なぜなのでしょうか、、 参考リンクを頂きありがとうございます。 この問題が解決しましたら、 配列を勉強していきます。
kpiyohiko

2016/09/20 06:34

どのようにstr2とstr3を追加されましたでしょうか? よろしくお願い致します
chi_yan

2016/09/20 06:38

ご返信ありがとうございます。 下記のように追加しました。 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; class java_kadai2_3 { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str1 = ""; String str2 = ""; String str3 = ""; try { //キーボードから任意の1つ目の数字を打ち込む for( int i = 0; i < 3; i++ ){ System.out.print("値を入力して下さい>"); str1 = br.readLine(); str2 = br.readLine(); str3 = br.readLine(); } } catch (IOException ex){ System.out.println("数字読み込みを失敗しました。"); return; } int num1; int num2; int num3; try { //str1,str2を数値の変換し、変数num1,num2,num3へ代入 num1=Integer.parseInt(str1); num2=Integer.parseInt(str2); num3=Integer.parseInt(str3); } catch (NumberFormatException ex){ System.out.println("数字読み込みに失敗しました。" ); return; } //四則演算を行う int sum=num1+num2+num3; //四則演算の結果をそれぞれ表示 System.out.println(str1 + "+" + str2 +"+"+ str3+"="+ sum); } }
kpiyohiko

2016/09/20 06:46

ありがとうございます どのようなエラーが出ますか?また、ブレイクポイントを張って、どこで処理に失敗しているか分かりますでしょうか。 よろしくお願い致します
kpiyohiko

2016/09/20 06:49

そして、現状のソースコードを見ると3回×3回の計9回数字を入力していますよね? for文で実行できると数字を3回入力できるだとどちらが優先度高いですか? 分解してやらないと解決しなさそうです。 for文が先でしたら、やはり配列を使わないとエラーが回避出来なさそうです。 数字3回入力でしたら、for文を外して(コメントアウトして)実行すると良さそうです
kpiyohiko

2016/09/20 07:12

もう、答えが記載されてしまいましたが、 String[] str = new String[3]; for (int i=0; i<3; i++) { str[i] = br.readLIne(); } これで配列を使用したループ処理が出来ます。(for分を使用する際にはほぼ間違いなく使用します) 同様に、数値に変換する箇所にも上記をまねて記載すればうまくいきます。 最後の四則演算とsystem.outの箇所に一工夫が必要で str[1] + str[2]とするか for( int i = 0; i < 3; i++ )を使用して {str[i] }とするのがスマートかと思います
chi_yan

2016/09/20 07:20

ありがとうございます。 現状ですと、3回入力を求められて、 数値を入力しているのにもかかわらず、 } catch (IOException ex){ System.out.println("数字読み込みを失敗しました。");の部分が表示されます。 for文が優先が高いので、配列を使ってみます。
chi_yan

2016/09/20 07:37

度々失礼します。 配列を使い、下記のとおり書きましたが、 エラーが出ます。。 どこがいけないのでしょうか。。 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; class java_kadai2_3 { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] str = new String[3]; try { //キーボードから任意の1つ目の数字を打ち込む for( int i = 0; i < 3; i++ ){ System.out.print("値を入力して下さい>"); str[i] = br.readLine(); } } catch (IOException ex){ System.out.println("数字読み込みを失敗しました。"); return; } int num1; int num2; int num3; try { //str1,str2を数値の変換し、変数num1,num2,num3へ代入 num1=Integer.parseInt(str1); num2=Integer.parseInt(str2); num3=Integer.parseInt(str3); } catch (NumberFormatException ex){ System.out.println("数字読み込みに失敗しました。" ); return; } //四則演算を行う int sum = 0; for (int i=0; i<3; i++) { strs[i] = br.readLine(); sum += i; } //四則演算の結果をそれぞれ表示 System.out.println(sum); } }
kpiyohiko

2016/09/20 07:46

num1=Integer.parseInt(str1); これを配列に直さないといけないですね。 具体的には num1=Integer.parseInt(str[0]); num2=Integer.parseInt(str[1]); num3=Integer.parseInt(str[2]); 配列は0から格納されるため 以上です。 いかがでしょうか
chi_yan

2016/09/20 08:31

ご丁寧に解説して頂き、ありがとうございます。 コンパイルでき、エラーはおきなくなりました。 しかし、計算結果が3つ足した数字ではないものが表示されてしまいます。。 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; class java_kadai2_4 { public static void main(String[] args) { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] str = new String[3]; try { //キーボードから任意の1つ目の数字を打ち込む for( int i = 0; i < 3; i++ ){ System.out.print("値を入力して下さい>"); str[i] = br.readLine(); } } catch (IOException ex){ System.out.println("数字読み込みを失敗しました。"); return; } int num1; int num2; int num3; try { //str1,str2を数値の変換し、変数num1,num2,num3へ代入 num1=Integer.parseInt(str[0]); num2=Integer.parseInt(str[1]); num3=Integer.parseInt(str[2]); } catch (NumberFormatException ex){ System.out.println("数字読み込みに失敗しました。" ); return; } //四則演算を行う int sum = 0; for (int i=0; i<3; i++) { sum += i; } //四則演算の結果をそれぞれ表示 System.out.println("合計は" +sum + "です"); } }
chi_yan

2016/09/20 08:36

解決しました!!! わかりやすい解説をして頂き、 本当に本当にありがとうございます。 まだまだJavaを始めたばかりなので、 習得できるように頑張りたいと思います。 ありがとうございました。
kpiyohiko

2016/09/20 08:39

6とでていませんか? for (int i=0; i<3; i++) { sum += i; } ここで使用しているsumを出力しています。 正しくは int num1;を integer[] num = new integer[3]; for (int i=0; i<3; i++) { //num0/1/2 に値を入れる num[i] = Integer.parseInt(str[i]); } for (int i=0; i<3; i++) { sum += num[i]; } とすれば期待している結果が出ると思います
kpiyohiko

2016/09/20 08:40

おめでとうございます!!!!良かったです!
chi_yan

2016/09/20 08:45

本当にありがとうございました!!! 無事できてとてもうれしかったです。 すいません、学習法について質問なのですが、 実務で使えるようになるのに、 おすすめの学習法などはございますでしょうか?? この1週間で集中的にJavaを勉強しようと考えています。
kpiyohiko

2016/09/20 08:59

1にも2にもまずはテキストを購入してやってみるということですかね。 それが終わったら、そこから派生して、作成したものに、これは出来ないか、こうしたら便利ではないか ということをひたすら探求しtry&errorを繰り返すことに尽きると思います。 私はプログラマーではないので、詳しい事まで勉強していませんが、言語はPGや外国語問わず同じだと考えています。 また、ネットに散在する初学者用のサイトも多数ありますのでお勧めです。 ひとまず、基礎が無いと他の言語をやった時に非常に苦労しますので、基礎が大変重要です。 頑張ってください!
kpiyohiko

2016/09/20 09:00

テキストを購入せずとも、初学者用のサイトでも十二分に知識は身につけられます。 最初に記載した、サイトも非常におすすめです
chi_yan

2016/09/20 09:11

ありがとうございます。 まずはテキストを一通りやり、基礎を身につけたいと思います。 最初に教えて頂いたサイトも参考にさせて頂きます。 ご丁寧な回答、本当にありがとうございました。 わかりやすく、とても理解しやすかったです。 Java頑張ります!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問