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

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

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

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

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

2回答

5547閲覧

processingで最大値を求めるプログラム

likuson

総合スコア34

Java

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

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

1クリップ

投稿2019/11/15 08:51

編集2019/11/15 09:00

前提・実現したいこと

processingで最大値を求めるプログラムを作っています。具体的な内容は、まず配列の置き場としてa[]とします。次にランダムに100のなかから10個、数を生成します。配列の最初の値をiとし、最後の値をjとします。つまり、a[i]からa[j]の最大値を求めます。もしiとjが同じ値なら、a[i]を返します。そうでないなら、つぎのようなここからが言葉では説明できるのですが、プログラムが完成できません。まず、kという値を定義します。k=i+(j-i)/2です。つまり、配列のちょうど真ん中です。そして、⭐kより前(a[i]~a[k])の最大値の値とkより後(a[k]~a[j])の最大値の値をそれぞれ求め⭐、そのそれぞれの値を比較し大きいほうの値を返します(max())。⭐で囲まれた部分が分かりません。プログラムでいうと最後のreturn(max());という部分です。解答お待ちしております。

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

プログラムが完成していないので、エラーメッセージはありません。

該当のソースコード

processing

1int D[]; 2int N=10; 3 4void setup(){ 5 D=new int [N]; 6 for(int i=0;i<N;i++){ D[i]=(int)random(100); } 7 noLoop(); 8} 9 10void draw() 11{ 12 println("----- before -----"); println(D); 13 println("Mqx value is "+FindMax(D,0,N-1)); 14} 15 16int FindMax(int a[], int i, int j){ 17 int k; 18 if(i==j){ 19 return(a[i]); 20 }else{ 21 k=i+(j-i)/2; 22 return(max()); 23 } 24 25 26} 27 28

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

azuapricot

2019/11/15 08:53

現時点までのあなたが書いたコードを提示して下さい。
azuapricot

2019/11/15 08:54

(あぁ、質問途中であげちゃったんですね)
likuson

2019/11/15 08:55

すいません。全体の説明もまだ未完成なのに投稿してしまいました
azuapricot

2019/11/15 08:55

(あと文章が拙いので結局最終的にはどうなってほしいのかこちらには伝わってきません) (例を提示しましょう)
likuson

2019/11/15 09:01

文章の修正を行いました。遅れてすいません。
azuapricot

2019/11/15 09:06

ゆっくりでいいので文章にきちんと改行を入れた方がいいです。 読みにくいことこの上ない・・・
guest

回答2

0

ベストアンサー

1週間以上経ってやっと意味が分かりました。 どちらかというと私の理解力の問題ですw

return(max()); というのが「そういう関数を作れ」という意味だと思っていました。。。
Math.max(int a, int b) のこととは、まったく思い至りませんでしたorz
せめて return(max(???, ???)); となっていれば、気が付いたかもしれませんが。。

こういったたぐいの問題は苦手なので、ベテランの方々に突っ込まれるのがイヤなのですが、とりあえず間違った答えを出すことはなさそうでした。

Processing

1//import java.util.Arrays; 2 3void setup() { 4 noLoop(); 5 6 //for (int ii = 0; ii < 100000000; ii++) { 7 8 9 int[] nums = new int[10]; 10 for (int i = 0; i < nums.length; i++) { 11 nums[i] = (int)random(100); 12 } 13 14 int max = findMax(nums, 0, nums.length - 1); 15 println(join(nf(nums, 0), ", ") + " max:" + max); 16 17 18 // // まったく自分を信用してませんw 19 // int verify = Arrays.stream(nums).max().getAsInt(); 20 // if (max != verify) { 21 // throw new RuntimeException(join(nf(nums, 0), ",") + " max:" + max + " verify:" + verify); 22 // } 23 //} 24 //println("done"); 25} 26 27int findMax(int[] array, int left, int right) { 28 if (left == right) { 29 return array[left]; 30 } else { 31 int center = left + (right - left) / 2; 32 return max(findMax(array, left, center), findMax(array, center + 1, right)); 33 } 34}

書いている間に当然StackOverflowErrorを出すわけですが、int[10]がいくらくらいで出るのかと実験したら、先にOutOfMemoryErrorになりました。
当方では int[670820000]OK int[670830000]NG

投稿2019/11/23 21:57

TN8001

総合スコア9317

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

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

0

たぶんこれ、トーナメント表のような形で最大値を出そうとしていますね。
候補がABCDEFGHの8つあったとしたら、
最初の操作でABCDとEFGHに分け、そのグループをさらに半分に分け、グループ内での最大値を出そうとしているのでしょう。なぜそんな形にしたいのか謎ですが。

アルゴリズムとしては「ヒープソート」が近いですね。ソートするわけではなく最大値の選定ですが。ヒープソートと、ついでに再帰についても勉強しておくといいでしょう。

投稿2019/11/15 08:55

編集2019/11/15 19:33
swordone

総合スコア20651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問