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

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

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

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

Q&A

解決済

2回答

1288閲覧

結果の出力が上手くいかない

prog1717nm

総合スコア56

Java

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

0グッド

0クリップ

投稿2017/09/01 15:23

編集2017/09/01 15:43

以下は、入力した数値の平均を表示するプログラムです。平均は切り捨てです。
まず初めに、数値の個数(n)を入力し、その後に数値を入力していきます。最後に0と入力すると終了します。
例えば、
4
1
2
3
4
0
と入力すると、
2と出力されます。一番上の4は数字の個数です。
ここまでは良いのですが、入力データセットが複数あると、前の入力データセットの平均がリセットされてしまいます。
例えば、
4
1
2
3
4
6
1
2
3
4
5
7
0
と入力した場合、一番上の4と6が数値の個数を表し、データセットの境目になっているのですが、結果は2つめのデータセット(123457)の方の平均しか出力されず、(1234)の平均は出力されません。おそらく上書きされているからだとは思いますが、どう書いたらよいか困っています。0を入力した後に2つの結果を表示するようにしたいです。教えていただけないでしょうか。よろしくお願いします。

java

1import java.util.Scanner; 2public class Average{ 3 public static void main(String[]args){ 4 Scanner sc = new Scanner(System.in); 5 int y=0; 6 while(sc.hasNext()){ 7 int n=sc.nextInt(); 8 if(n==0) {System.out.println(y); 9 break;} 10 int[]a=new int[n]; 11 for(int i=0; i<n; i++) a[i]=sc.nextInt(); 12 int x=0; 13 for(int i=0; i<n; i++){ 14 x=x+a[i]; 15 } 16 y=x/n; 17 } 18 } 19}

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

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

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

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

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

guest

回答2

0

処理フローを考え直しましょう。

  開始   ↓   平均を入れる配列またはListを用意   ↓ →→処理個数入力 ↑ ↓ ↑ 0以外か? → No → 配列またはListの内容を出力して終了 ↑ ↓ Yes ↑ 処理個数分入力して平均を求める ↑ ↓ ↑←求めた平均を配列やListに入れる

こうしないと各回の平均を出力できません。
現状最後に終了するときだけ出力を行っているため、最後の平均の結果しか出力できません。

投稿2017/09/01 15:33

編集2017/09/01 15:53
swordone

総合スコア20651

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

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

0

ベストアンサー

それなりに改造しました。

Java

1import java.util.ArrayList; 2import java.util.List; 3import java.util.Scanner; 4 5public class Mean{ 6 public static void main(String[]args){ 7 Scanner sc = new Scanner(System.in); 8 List<Double> means = new ArrayList<>(); 9 10 System.out.println("何個の整数を入力するか入れてね"); 11 while(sc.hasNext()) { 12 int inputLen = sc.nextInt(); 13 if(inputLen == 0) { 14 break; 15 } 16 17 int sum = 0; 18 System.out.println(inputLen + "個入力してね"); 19 for(int i = 0; i < inputLen; i++) { 20 sum += sc.nextInt(); 21 } 22 means.add(1.0 * sum / inputLen); 23 24 System.out.println("何個の整数を入力するか入れてね"); 25 } 26 27 System.out.println(means); 28 } 29} 30 31/* 出力 32何個の整数を入力するか入れてね 334 344個入力してね 351 362 373 384 39何個の整数を入力するか入れてね 406 416個入力してね 421 432 443 454 465 477 48何個の整数を入力するか入れてね 490 50[2.5, 3.6666666666666665] 51*/

本質的な回答とはちょっと違いますので、参考程度に見てみてください。
ただし、インデントはちゃんと揃えましょう


元のプログラムをある程度維持するとこんな感じ。

Java

1import java.util.Scanner; 2public class Average{ 3 public static void main(String[]args){ 4 Scanner sc = new Scanner(System.in); 5 int[] result = new int[100]; 6 7 int resultNum = 0; 8 while(sc.hasNext()){ 9 int n=sc.nextInt(); 10 if(n==0) {break;} 11 int[]a=new int[n]; 12 for(int i=0; i<n; i++) a[i]=sc.nextInt(); 13 int x=0; 14 for(int i=0; i<n; i++){ 15 x=x+a[i]; 16 } 17 18 result[resultNum] = x/n; 19 result++; 20 } 21 22 // 出力 23 for(int j = 0; j < 100; j++) { if(result[j] == 0) 24 break; 25 System.out.println(result[j]); 26 } 27 } 28}

インデントを意図的に崩し、わざと冗長な方法を用いてみました。

投稿2017/09/01 15:42

編集2017/09/01 15:55
LouiS0616

総合スコア35660

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

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

prog1717nm

2017/09/01 16:07

ありがとうございました!
LouiS0616

2017/09/01 16:26

過去の質問を拝見しました。厳しいことを言うようですが... インデントをそろえる/エラーメッセージをよく読む/格納されている値を適宜確認する/... このあたりのテクニックは、毎回の反省の中で学んで欲しいものです。 「とりあえず動けばいい」「エラーが出たら聞けばいい」この考えから脱却してください。
LouiS0616

2017/09/01 16:27

あと、書いているコードが全体的に古すぎます。 生産性を上げるためにも、基礎を固めるためにも、新しめの入門書を通読することをお勧めします。
swordone

2017/09/01 16:31

古いというより、無駄が多い
LouiS0616

2017/09/01 16:39

そうですね。 非拡張for文と生配列ばっかりに目が向いてしまって、古いという表現を使ってしまいました。 新しさ以前の問題であることについてはその通りだと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問