Javaのプログラミング課題解決方法と結果の説明

このQ&Aのポイント
  • Javaのプログラミング課題で困っている方への解決方法と結果の説明
  • Javaのプログラミング課題でわからない部分の解説と結果の説明
  • Javaのプログラミング課題解決方法とA[k]==aの比較回数の説明
回答を見る
  • ベストアンサー

お願いします。m(><)m

つい最近Javaのプログラミングを大学ではじめたものなんですが、 次のような課題を出されたのですが全然わからないため困っており・・・ どなたか分かる方ぜひ教えていただけないでしょうか?m(><)m 3.次のプログラムは何を行うプログラムか.簡単に説明しなさい.また, 結果を得るまでに,A[k]==aの比較が行われた回数を書きなさい. A=new Array(3, 8, 19, 20, 22, 24, 45); i=0; j=A.length-1; a=19; k=Math.floor((i+j)/2); while(i<=j){ if(A[k] == a){ break; } else if(A[k] > a){ j = k - 1; } else{ i = k + 1; } k = Math.floor((i+j)/2); } if(i>j) k=-1; document.write(a," ",k);

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

  • ベストアンサー
  • cojirou
  • ベストアンサー率50% (59/117)
回答No.4

A=new Array(3, 8, 19, 20, 22, 24, 45); //新しい配列Aを設定。配列要素は()の中身。 i=0; //変数iを設定。設定値は0。 j=A.length-1; //変数iを設定。設定値はAの要素数-1(つまり7-1=6)。 a=19; //変数aを設定。設定値は19。 k=Math.floor((i+j)/2); //変数kを設定。設定値は(i+j)/2の小数点以下を切捨てした値(つまり初期点では(0+6)/2=3)。 while(i<=j){ //iがj以上の間繰り返し。 if(A[k] == a){ //A[k]とaの値が等しい場合 break; //whileの繰り返しを終了。 } else if(A[k] > a){ //A[k]がaより大きい場合 j = k - 1; //jにk-1を設定する。 } else{ //上記以外の場合(つまりA[k]がa以下の場合) i = k + 1; //iにk+1を設定する。 } k = Math.floor((i+j)/2); //変数kを再設定。設定値は(i+j)/2の小数点以下を切捨てした値。 } if(i>j) k=-1; //iがjより大きい場合はkに-1を設定する。 document.write(a," ",k); //出力 日本語で説明すると、以上のようなプログラムかと思います。 質問は、『if(A[k] == a){』の部分を何度繰り返すか、という問題になると思います。 参考URL等で確認して、問題を自分で解けるように頑張ってください。 参考までに。

参考URL:
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/servlet_jsp_k01.htm
yassan918
質問者

お礼

回答ありがとうございます。 大変参考になりました、あとは自分の力で解けるように がんばってみます。

その他の回答 (3)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

最後の行に document.write とかあるし、JavaScriptでいいんじゃないですか? 出力のところだけいじれば Windows cscriptでも実行できたし。 それはともかく 何かの課題じゃないんですか、コレ?

  • VCAT
  • ベストアンサー率20% (16/79)
回答No.2

まちがえたorz ここはJavaScriptです。 Javaの質問は他で。

  • VCAT
  • ベストアンサー率20% (16/79)
回答No.1

ここはJavaScriptではありません。 Javaは他で。

関連するQ&A

  • JavaScriptで全くの初心者なのですが、

    JavaScriptで全くの初心者なのですが、 フィッシャーイェーツのシャッフルをaのリスト内でしてから、 そこから一つ値をとり、 別の関数内で、その関数内での新たな変数に代入するようにしたいです。(function(){var b = this.result;}のような) プログラミングはやらないのに急に使うことになり困っているのでだれか助けてください。 a = [1,1,1,5,5,5,9,9,9]; for (var a=[],i=0;i<9;++i) a[i]=i; this.result = a[shuffle(a.length)] ; function shuffle(array) { var tmp, current, top = array.length; if(top) while(--top) { current = Math.floor(Math.random() * (top + 1)); tmp = array[current]; array[current] = array[top]; array[top] = tmp; } return array; }

  • javascriptで重複しないように値を取得したい

    題のとおり、javascriptで重複しないように値を取得したいと思っております。 以下ソースの一部です。 for (var v = 0; v < 5; v++) { var i = 0; var a = Math.floor(Math.random()*test.length); while ( a == i ){ a = Math.floor(Math.random()*test.length); } if (a != i){ i = a; } } このプログラムだと隣り合う回数の1回目と2回目などは重複しないんですが、1回目と3回目は重複してしまいます。 なにか重複しない方法はないでしょうか?初心者説明ですいませんが、ご教授おねがいします。

  • JavaScriptについての質問です。

    ガウスの消去法による解の求め方をプログラムしたいのですが、上手くいかなかったので質問しました。以下のプログラムから実行はできるのですが、解が求められていませんでした。 どこを変えればきちんとできるのでしょうか、回答お願いします。 var A=[[1,-1,1],[1,2,0],[2,0,3]],b=[5,1,9]; WScript.Echo("ガウスの消去法の解:\n"+Gauss(A,b)); function Gauss(A,b) { var s,x=new Array(A.length),M=new Array(A.length); for(var i=k+1;i<A.length-1;k++) { for(var i=k+1;i<A.length;i++) { M[i]=new Array(A.length); M[i][k]=(A[i][k])/(A[k][k]); for(var j=k+1;j<A.length ;j++) A[i][j]=A[i][j]-(M[i][k]*A[k][j]); b[i]=b[i]-(M[i][k]*b[k]); } } for(var i=A.lengh-1;i>=0;i--) { s=0; for(var k=i+1;k<A.length;k++) s+=A[i][k]*x[k]; x[i]=(1/A[i][i])*(b[i]-s); } return x; }

  • JScriptの添削お願いします。

    連立一次方程式の解を求めるプログラムです。 下のプログラムで示した部分で2次元配列の行データの初期化をしたいのですがうまくいきません。 たぶんそこだけ間違えているだけだとは思いますが、他に間違えているところもあれば指摘お願いします。 全体的な書き直しで訂正を頂くよりも、今の状態からどこを直せばいいのか教えてもらえると勉強になります。 また、定数が3つから4つに増えた場合は、※(下記参照お願いします)にて単純に数字をコンマで区切って4つに増やせばいいのでしょうか? 例)var A=[ [1,-4,3.3], [1,-5,2.3], [1,-1,1.3], ],b=[-1,2,0.3] 他に下の方のプログラムも変えなければいけないのでしょうか? 以上質問2つありますが、片方だけでも結構ですのでよろしくお願いします。 以下がプログラムになります。 var A=[ [1,-4,3], [1,-5,2], [1,-1,1], ],b=[-1,2,0] //※ WScript.Echo("ガウスの消去法による解:"+Gauss(A,b)); function Gauss(A,b){ var s,x=new Array(A.length),M=new Array(A.length); //ガウスの消去法 for(var k=0;k<A.length-1;k++){ for(var i=k+1;i<A.length;i++){ M[i]=new Array() ; // ←ここが違うと思うのですが… M[i][k]=A[i][k]/A[k][k]; for(var j=k+1; j<A.length;j++) A[i][j]= A[i][j] - M[i][k]*A[k][j] ; b[i]=b[i]-M[i][k]*b[k]; } } //ガウスの消去法 for(var i=A.length-1;i>=0;i--){ s=0; for(var k=i+1;k<A.length;k++) s+= A[i][k]*s ; x[i]=(1/A[i][i])*(b[i]-s); } return x; }

  • javascriptの九九の表の書き換えについて

    var a; for (a=1; a<10; a++) if (a<=1){ document.write("   "+a); }else{ document.write(" "+a);} document.write("<br>"); document.write("---------------------------------"); document.write("<br>"); var i, j; for (i=1; i<10; i++) { document.write(i+"|"+" "); for (j=1; j<10; j++) { var k = i*j; if ( k > 81 ) { break; } if (k>=10){ document.write(" "+k+" "); }else { document.write(" "+k);} } document.write("<br />"); } forを使った九九の表はできたのですが これをwhileを使ったコードに書き換えるにはどうしたらいいでしょうか?

  • このソースコードについて

    AOJにてこのコードを提出したところTime Limit Exceededでドロップされました。 Visual studio 2013 で動かしたところ特に怪しい挙動や間違いを出力することはなかったのですが。。。 ちなみに言語はC++です。 問題のURL http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0056 #include<iostream> #include<math.h> using namespace std; int p[20000],d; void primefinder(int a){ p[0] = 2; int k, l = 0; for (int i = 3; i <= a; i++){ k = (int)sqrt(i); for (int j = 2; j <= k + 1; j++){ if (j == k + 1){ p[++l] = i;} else if (i%j == 0)break; } } d = l + 1; } int main(){ int n,m,q,count; while ((cin >> n), n){ count = 0; m = n / 2; primefinder(m); for (int i = 0; i < d; i++){ q = n - p[i]; if (q <= 1)continue; for (int j = 2; j <= (int)sqrt(q)+1; j++){ if (j == (int)sqrt(q) + 1)count++; else if (q%j == 0)break; } } cout << count << endl; } }

  • c 画像の一致を調べる

    ppmの画像2つがあり、画像2は画像1のどこか一部分を切り取った画像です。 HEIGHT 画像1の縦 WIDTH 画像1の横 HEIGHT_R 画像2の縦 WIDTH_R 画像2の横 とします。 image[i][j].g 画像1 image_re[i][j].g 画像2 には各位置での緑の色情報を格納しているとします。このときに比較の方法は次のようにしてみました。画像1の左上の座標を(0,0)として横に調べていき、一致したところ(1)でそこからWIDTH_Rだけの幅の範囲で各マスが合っているか比較し、合っていれば次の下の行について同じことをして。。。 それでもし一致しないところが出てきたら、(1)のもう一つ横マスについておなじことをやって。。。 と繰り返していく方法です for(i=0; i<HEIGHT; i++) for(j=0; j<WIDTH; j++) for(m=i; m<i+HEIGHT_R; m++){ if(a=0){a=1;break;} if(image[j][m].g == image_re[j][m].g) for(k=j; k<j+WIDTH_R; k++) if(image[k][m].g==image_re[k][m].g)a=1; else {a=0; break;} else break; if(m==i+HEIGHT_R)printf("TRUE"); としてみたのですが どうもsegmentation fault と出てしまいます。 まちがってるところがあればご指摘下さい

  • 二次元配列に数字をランダムに入れる

    --------------------------- | 2 | 3 | 7 | 4 | 1 || 17 |<横合計> --------------------------- | 6 | 1 | 2 | 3 | / || // | --------------------------- | 1 | / | / | / | / || // | --------------------------- | 2 | / | / | / | / || // | --------------------------- | 3 | / | / | / | / || // | --------------------------- --------------------------- | 14 | / | / | / | / || // |<全合計> --------------------------- <縦合計> このように表示される。 …という処理がしたいのですがどういう処理を書けば良いのかわかりません。 理解した(1)と(2)の乱数発生の文を書いておきます。 *二次元配列を作成* a = new Array(5) for (i = 0; i <= a.length-1; i++){ //1次元 a[i] = new Array(5) for (j = 0; j <= a[i].length-1; j++){ //2次元 a[i][j] = "["+ i +","+ j +"]" var g = ""; document.write(a[i][j]); } } *乱数を100回発生* var z = ""; for(k = 1; k <= 100; k++){ z = Math.round(Math.random()); //発生した乱数をzに代入 } 以上、 よろしくお願いいたします。

  • 配列プログラムのバグ

    入力した正の整数を読み込み、小さい順に並べ替える配列のプログラムを作りたいのですが、以下のプログラムで結果がくるってしまいます。 色々な数値を入力してみたところ、入力した数字のうち、どれかが0に なってしまうようなのですが、いまいち理解できません。 どこを修正すればいいのでしょうか? #include<stdio.h> int main(void){ int a[255],b,i=0,j,k; while(i<255){ printf("正整数:\n"); scanf("%d",&a[i]); if(a[i]==0) break; else if(a[i]<0){ printf("正の整数ではありません"); return 0; } i++; } for(k=0;k<=i;k++){ for(j=0;j<=i;j++){ if(a[j]>a[j+1]){ b=a[j]; a[j]=a[j+1]; a[j+1]=b; } } } printf("入力された整数は小さい順に"); for(j=0;j<=i;j++){ printf("%d,",a[j]); } printf("です。"); return 0; }

  • ソート(?)がうまくいかない。

    こんにちは、今おみくじスクリプトを作成しているのですが、うまくいかない点があります。 大吉や吉といったランクごとに、健康運や恋愛運といった6つの部分が◎○△×のどれかにランダムでなるというスクリプトをつくりました、うまく実行はされるのですが、処理が重く、IEで「実行をとめますか?」とエラーが出ています。 何か、おかしな点があれば、教えていただけませんか? for(cnt=0;cnt<w.ura;cnt++) { j = Math.floor(Math.random()*i); if(utc[j]==0) utc[j] = "◎"; else{ cnt -=1; } } for(cnt=0;cnt<w.urb;cnt++) { j = Math.floor(Math.random()*i); if(utc[j]==0) utc[j] = "○"; else{ cnt -=1; } } for(cnt=0;cnt<w.urc;cnt++) { j = Math.floor(Math.random()*i); if(utc[j]==0) utc[j] = "△"; else{ cnt -=1; } } for(cnt=0;cnt<w.urd;cnt++) { j = Math.floor(Math.random()*i); if(utc[j]==0) utc[j] = "×"; else{ cnt -=1; } } w.ura等は、ランクごとの◎などの数が格納されたストラクトです。 やっていることは、◎の数まわして、空の配列であれば、◎をいれるといったことです。 よろしくご教授ください。