10人分の点数を格納する配列を用意し、平均点および平均点以上の人数と番号を表示するプログラムで、うまく表示されない理由は?

このQ&Aのポイント
  • Javaのプログラムで10人分の点数を入力し、平均点および平均点以上の人数と番号を表示するが、うまく表示されない理由を教えてください。
  • Javaのプログラムで10人分の点数を入力し、平均点および平均点以上の人数と番号を表示するが、番号と人数が正しく表示されない理由を教えてください。
  • Javaのプログラムで10人分の点数を入力し、平均点および平均点以上の人数と番号を表示するが、出力が正しくない理由を教えてください。
回答を見る
  • ベストアンサー

キーボードから10人分の点数を格納する配列を用意し、平均点および平均点

キーボードから10人分の点数を格納する配列を用意し、平均点および平均点以上の人数と番号を表示するプログラムで、下記のプログラムを作成してみたんですけど、平均点以上の人数と番号がうまく表示されません。if文でも人数は0になるし、番号は1~10番まで表示されるし、なぜでしょうか? import java.io.*; class Hairetu2 { public static void main(String args[]) throws IOException { System.out.println("10人分の点数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int s[]=new int[10]; int i; int sum=0,count=0; double avg=0; for(i=0; i<s.length; i++){ System.out.print((i+1)+"番は?"); String str = br.readLine(); int a = Integer.parseInt(str); s[i]=a; sum+=a; avg = (double)sum/10; if(avg<=count) count++; } System.out.println("平均点は"+avg); System.out.println("平均点以上の人は"+count+"人"); for(i=0; i<s.length; i++){ if(i>=avg) i++; System.out.print((i+1)+"番\t"); } } }

  • aw345
  • お礼率2% (1/48)
  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

ループの1順でなにが行われるのか 変数が表している値はなにか といったところを、よく考えなおしてください。 紙とエンピツで手計算する時にどういう順番でやるかを考えてみるのも手です。 > avg = (double)sum/10; この時点では、sumには「今まで入力した人数分の合計」が入っています。 10人になるのは最後の1回だけです。それ以外は10で割っても平均にはなりません。 また、それまでの人数(=i+1)で割っても、「それまでの人数分の平均」であって「10人分の平均」ではありません。 > if(avg<=count) > count++; avgは「平均値」、countは「平均値以上の人の人数」ですよね? この2つを比較する意味ってありますか? また、上に書いたように、このループでは「全員の平均点」は計算できないのですから、「平均点以上かどうか」なんて判定できませんよね。 >if(i>=avg) >i++; これはさらに意図が不明です。 iはループで何番目かを表わすのに使っているようですが、それと平均値を比較する意図がわからないですし、判定結果によってはiを増やそうとするのもわかりません。 おそらく、平均が10以上になっているので i++が実行されず、1番から10番まで表示されたのでしょう。平均を5点くらいになるように入力してみてください。番号が飛び飛びになるはずです

関連するQ&A

  • osamuyさん、では「今まで入力した人数分のの平均」と「10人分の平

    osamuyさん、では「今まで入力した人数分のの平均」と「10人分の平均」とはどう違うのですか。やっぱりforループが関係しているのですか? ・「今まで入力した人数分の平均」 double avg=0; for(i=0; i<test.length; i++){ System.out.print((i+1)+"番は?"); String str = br.readLine(); int a = Integer.parseInt(str); test[i]=a; sum+=a;               avg = (double)sum/10; }          System.out.println("平均点は"+avg); ・「10人分の平均」          double avg=0; for(i=0; i<test.length; i++){ System.out.print((i+1)+"番は?"); String str = br.readLine(); int a = Integer.parseInt(str); test[i]=a; sum+=a; } avg = (double)sum/10; System.out.println("平均点は"+avg);

    • ベストアンサー
    • Java
  • javaで配列の格納をしたいです。

    配列の格納がうまくいきません。 javaについて質問させて頂きます。 ユーザーが数字を入力し配列 atr[ i ]に格納され 配列 v[ i ] に v[ 0 ] = count ... v[ 143 ] = count ... v[ 144 ] = count - 1 ... v[ 287 ] = count - 1 ... ... v[ count-288 ] = 2 ... v[ count-145 ] = 2 ... v[ count-144 ] = 1 ... v[ count-1 ] = 1 と、格納されるようなプログラムを作っています。 for文で作ろうと考えたのですが count, count-1 , ... 3, 2, 1と値を入れようと思いましたがうまくコンパイルが通りませんでした。 エラーは以下になります。 a.java:48: シンボルを見つけられません。 シンボル: メソッド readLine(int) 場所 : java.io.BufferedReader の クラス value = br_v.readLine(atr[i]); もし宜しければアドバイスやご指摘を頂けませんでしょうか。 説明も拙い部分がありますが宜しければお願いします。 import java.io.*; import java.util.Arrays; class a { public static void main(String[] args) throws IOException { int atr[]; atr = new int[25]; int count = 0; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(true){ //絶対に通る String str = br.readLine(); int res = Integer.parseInt(str); if(res == 0){ break; } else{ atr[count] = res; } count++; } for(int i=0; i<count; i++){ System.out.println(atr[i] + "が、選択されました。"); } int v[] = new int[25*144]; String value; try{ BufferedReader br_v = new BufferedReader(new InputStreamReader(System.in)); for(int i=count; i<count; i--){ value = br_v.readLine(atr[i]); v[i] = Integer.parseInt(value); } } catch(IOException e){ System.out.println("エラーです。"); } } }

  • 配列の乱数と平均値、個数表示

    0から9までの整数乱数を100個発生させ、100個の乱数の平均値も合わせて出力し、0から9それぞれの個数を数えるための変数に必ず配列を用いるプログラムを下記に作成したんですけども、出現個数カウント用の変数を10個用意していけないという条件で出現個数カウント用の配列を用意し、 結果が、 7 7 1 7 3 9 1 2 5 0 0 3 6 8 4 9 1 4 2 4 8 2 4 2 6 0 9 3 5 8 6 6 6 2 0 9 5 2 6 9 5 0 5 3 9 2 6 7 0 6 1 4 1 1 1 9 7 0 5 0 6 9 7 4 9 9 7 5 3 6 1 9 6 6 6 7 1 2 6 1 4 9 1 3 1 3 7 0 0 8 1 9 3 2 9 4 4 5 4 0 0 *********** 11 1 ************* 13 2 ********* 9 3 ******** 8 4 ********** 10 5 ******** 8 6 ************** 14 7 ********* 9 8 **** 4 9 ************** 14 平均 4.4 に表示されるプログラムがわかりません、Java初心者なので作ったプログラムのどこを直せばいいのか教えてください。 class Kadai06_5 { public static void main(String args[]) { int n=10; int a[] = new int[n]; int i; int sum=0; double avg=0; for(i=0; i<100; i++){ System.out.print((int)(Math.random()*10)); sum +=(int)(Math.random()*10); } for(i=0; i<n; i++){ System.out.println(); } avg=(double)sum/100; System.out.println("平均"+avg); } }

    • ベストアンサー
    • Java
  • CSVファイルを二次元配列に格納するプログラム

    前回のソースコードを改変してみました String Str = ""; int Count = 0; try { File inFile = new File("./res/test.csv"); FileReader fr = new FileReader(inFile); BufferedReader br = new BufferedReader(fr); while (br.ready()) { Str = br.readLine(); String[] temp = Str.split(","); int[] m = new int[temp.length]; for (int i = 0; i < temp.length; i++) { m[i] = Integer.parseInt(temp[i]); System.out.print(m[i] + ","); } System.out.println(); Count++; } br.close(); fr.close(); } catch (Exception e) { System.out.println("ファイル読み込みに関するエラー"); } 今一次元配列になっているのですが、これを二次元配列に代入したいのです Countで何回ループしたかによって二次元配列の縦の要素数としたかったのですが、 そうすると横の要素数になるループ中の一次元配列が使えないので困っています

  • 【初心者です】最大値の箇所

    import java.io.*; public class ex41b { public static void main(String[] args) throws Exception { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int[] a = new int[100]; int count = 0; while(count < a.length) { System.out.print(count + "> "); int v = (new Integer(in.readLine())).intValue(); if(v == 0) break; a[count] = v; ++count; } int max = a[0]; for(int i = 1; i<a.length; i++) { if(a[i]>max) max = a[i]; } System.out.println("max: " + max); System.out.println("pos: " + ****); } } このソースで、最大値と最大値が何番目かを出力したいのですが、 最後の****に何を当てはめればいいのかが分かりません。 いくつかやってみたのですが、よく分かりませんでした。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 文字列の比較について

    BufferedReaderでファイルを読んだのちに、見出しの文字列をカンマで分割して 文字列を比較しようとしています。 ですが、分割すると、文字列が別な文字コードによる表記に変わってしまいます。 なぜでしょうか? また、解決方法などのヒントなどあれば教えてください。 BufferedReader buffReader = new BufferedReader( new FileReader("/home/masa/Desktop/Sample.csv")); String s; int ini=0; int wamei=0; int i=0; while((s = buffReader.readLine())!= null){ String[] str = s.split(",", -1); //System.out.println(s); if (i == 0) { for(int j=0; j<str.length;j++){ System.out.println(String.toString(str)); if(str.equals("五十音")){ini = j;} System.out.println("五十音"+ini); if(str.equals("a")){wamei = j;} System.out.println("和名"+wamei); //System.out.println(j); } } i++;

    • ベストアンサー
    • Java
  • コンパイル時のエラーについて

    Java超初心者の者です。 下記のコードどこか間違っていますか? class Sample4 { public static void main(String args[]) throws IOException { System.out.println("いくつまでの合計を求めますか?"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); int sum = 0; for(int i=1; i<=num; i++){ sum += i; } System.out.println("1から" + num + "までの合計は"      + sum + "です。"); } } テキスト通りに入力したつもりなのに何度確認して入力し直しても、 『'class'または'interface'がありません。』というエラーが 出てしまうのですが・・・ 色々ネットで検索して調べたのですが、分らなくて。

    • ベストアンサー
    • Java
  • countに実行した回数をいれたいです。

    javaのカウント回数について質問させて頂きます。 ユーザーから数字を入力した回数をint countに格納して 表示したいのですがコンパイルは通りますが実行できません。 elseの中にSystem.out.printlnした文字も表示されずどうやら elseを通ってなくatr[i]にも値が格納されてないようです。 調べた限りではわからなく宜しければアドバイスやご指摘をお願い致します。 import java.io.*; import java.util.Arrays; class last { public static void main(String[] args) throws IOException { int atr[]; atr = new int[25]; int count = 0; int your_plan[][] = new int[300][144]; //1日のスケジュール String dayplan; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(true){ //絶対に通る System.out.println("数字を選択してください。"); String str = br.readLine(); int res = Integer.parseInt(str); if(res == 0){ System.out.println("選択終了です。"); break; } else{ atr[count] = res; } count++; System.out.println(count); }

  • javaプログラミングについて!

    ただいまjavaプログラミングの勉強をしております。 そこで数字を複数回入力させ、-1を入力すると終了し、その数字の最大、最小、平均を出力するプログラムを作っているのですが、 public static void main(String[] args) { int max = 0; int min = 100; int sum = 0; int count = 0; Scanner sc = new Scanner(System.in); System.out.println("正の整数を入力してください"); int n = sc.nextInt(); while (num01 != -1){ System.out.println("正の整数を入力してください"); sum += n; n = sc.nextInt(); count++; if(max < n) max = n; if(min > n) min = n; } System.out.println("入力された整数の最大は" + max); System.out.println("入力された整数の最小は" + min); System.out.println("入力された整数の平均は" + sum/count); } } このようなプログラミングが作れたのですが、たとえば30と10を入力したときに 最大10 最小-1 平均20 と表示されてしまいます。色々試行錯誤してみたのですが、改善されなかったため質問させて頂きました。原因と解決方法を教えて頂きたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • java プログラム

    javaで下記のプログラムをコンパイルすると複数のシンボルが存在しませんとういう文が出てきます。 どのようにどこを書きなおせばコンパイル出来るのしょうか? public class Email { public static void main(String[] argv) throws Exception { String input = "fileContainingEmails.txt"; String output = "copyPasteMyEmails.txt"; BufferedReader cin; cin = new BufferedReader(new InputStreamReader(System.in)); String userInput; System.out.println("Enter input file name [default name: fileContainingEmails.txt]"); userInput = cin.readLine(); if (userInput.equals("")) userInput = input; String name; if (userInput.equals(input)) name = output; else name = userInput; String userOutput; System.out.println("Enter output file name [default name: " + name + " ]"); userOutput = cin.readLine(); if (userOutput.equals("")) userOutput = name; System.out.println("Input : " + userInput); System.out.println("Output: " + userOutput); BufferedReader fin; fin = new BufferedReader(new FileReader(userInput)); PrintWriter fout; fout = new PrintWriter(new FileWriter(userOutput, true)); String lineFromFile = ""; List listOfMail = new ArrayList(); int indexOfAt = 0; int s,e = 0; while (fin.ready()) { lineFromFile = fin.readLine(); indexOfAt = lineFromFile.indexOf('@',indexOfAt); while(indexOfAt > 0) { for(int i = 0;lineFromFile.charAt(indexOfAt-i) != ' ';i++) s = indexOfAt - i; for(int i = 0;lineFromFile.charAt(indexOfAt+i) != ' ';i++) e = indexOfAt + i; if(listOfMail.indexOf(lineFromFile.substring(s,e).toLowerCase) < 0); { listOfMail.Add(lineFromFile.substring(s,e).toLowerCase); fout.println(lineFromFile.substring(s,e).toLowerCase); System.out.println(lineFromFile.substring(s,e).toLowerCase); } indexOfAt = lineFromFile.indexOf('@',indexOfAt + 1); } } fin.close(); fout.close(); int count = 0; count = listOfMail.size(); if (count == 0) System.out.println("Sorry, no email addresses were found in the file " + userInput); else System.out.println(count + "email addresses "); 補足 またこのままだと読み込んだアドレス全て小文字になってしまうのですがそうではなく読み込んだメールアドレスAAA@BBBとaaa@bbbは同じメールアドレスとして扱い片方だけをコンソールに載せるというかたちにするにはどうすればよいのでしょうか?

専門家に質問してみよう