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

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

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

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

4回答

2029閲覧

配列とメソッドについての質問です。

frdhy

総合スコア11

Java

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

1グッド

0クリップ

投稿2017/10/01 12:09

配列の値の平均を計算するメソッドを持つプログラム(サイコロを3回ふり、でた目の和を10000回分、配列に保存したもの)を作りたいのですが、42行目の”total = total+t”のところで”二項演算子'+'のオペランド型が不正です”というエラーが出てしまいます。
”total”は"int"で"t"は"int[]"なので同じ式で表すことができないのはわかるのですが、それを一体どうすれば解決することができるのかわかりません。
どのように変えたらうまくいくのでしょうか。
よろしくお願いします。

import java.util.Random; public class abc { public static void main(String[] args) { Random rand = new Random(); int a = 0, b=0, c=0, n; int countTable[] = new int[19]; int repeatMax =1000000; for(int i=0; i<repeatMax; i++){ a = rand.nextInt(6)+1; b = rand.nextInt(6)+1; c = rand.nextInt(6)+1; countTable[a+b+c]++; } averageCount(countTable); } public static double averageCount(int t[]) { int total=0; double ave=0; total = total+t; ave = total/1000000; System.out.println("Average is"+ave); } }
退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答4

0

ベストアンサー

修正案としては下記のよう形ではいかがでしょうか。

  • クラス名は大文字で始めることが推奨されます。そのため、下記ではクラス名をAbcとしています。
  • averageCountメソッドはdoubleを返却するように定義されていますが値を返しません。そのため、下記ではvoidとしています。
  • 配列の中の数を参照する場合は、配列の要素の数だけループして処理する等の対応が必要になります。

Java

1import java.util.Random; 2 3public class Abc { 4 5 public static void main(String[] args) { 6 Random rand = new Random(); 7 int a = 0, b = 0, c = 0; 8 int countTable[] = new int[19]; 9 int repeatMax = 1000000; 10 11 for(int i = 0; i < repeatMax; i++){ 12 a = rand.nextInt(6) + 1 ; 13 b = rand.nextInt(6) + 1; 14 c = rand.nextInt(6) + 1; 15 countTable[a+b+c]++; 16 } 17 18 averageCount(countTable); 19 } 20 21 public static void averageCount(int t[]) { 22 int total = 0; 23 double ave = 0; 24 for (int i = 3; i < t.length; i++) { 25 total += t[i] * i; 26 } 27 ave = (double)total / (double)1000000; 28 System.out.println("Average is " + ave); 29 } 30}

投稿2017/10/01 12:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

frdhy

2017/10/01 12:44

とてもわかりやすかったです! ありがとうございましたm(__)m
guest

0

java

1for(i = 3; i < t.length; i++) { 2 total += t[i]; 3}

じゃなくてですか?

投稿2017/10/01 12:20

keicha_hrs

総合スコア6768

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

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

frdhy

2017/10/01 12:46

for文を使わなきゃいけなかったんですね... ありがとうございます!!
guest

0

java

1import java.util.Random; 2public class abc { 3 4 static int repeatMax = 1000000; 5 6 public static void main(String[] args) { 7 Random rand = new Random(); 8 int a=0, b=0, c=0, n; 9 int countTable[] = new int[repeatmax]; 10 11 for(int i=0; i<repeatMax; i++){ 12 a = rand.nextInt(6)+1; 13 b = rand.nextInt(6)+1; 14 c = rand.nextInt(6)+1; 15 countTable[i] = a + b + c; 16 } 17 18 averageCount(countTable); 19 } 20 21 public static double averageCount(int t[]) { 22 int total=0; 23 double ave=0; 24 for (int i=0; i< repeatMax; i++){ 25 total += t[i]; 26 } 27 ave = total/repeatMax; 28 System.out.println("Average is"+ave); 29 } 30}

こんなもんでどうでしょうか。質問の意図とあっているか不安ですが。。。

投稿2017/10/01 12:16

編集2017/10/01 12:18
maru2213

総合スコア16

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

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

LouiS0616

2017/10/01 12:25

aveをそのように取ると値が切り捨てられてしまいますよ。 あと、countTableの要素数は19のままで良いかと思います。
frdhy

2017/10/01 12:47

参考になりました! ありがとうございます!!
guest

0

for文を使って、tの要素を一個ずつ取り出して足せばいいです。

Java

1for(int i = 0; i < t.length; i++) { 2 total += t[i]; 3}

あるいは、

Java

1for(int elem: t) { 2 total += elem; 3}

投稿2017/10/01 12:15

LouiS0616

総合スコア35660

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

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

frdhy

2017/10/01 12:50

2つ方法があるんですね... いまいち上のやりかたわからなかったんですけど、LouiS0616さんの説明で理解することができました! ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問