ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュのまたまたお願いします。解いていだだけますでしょうか?

  • mixiチェック
  • このエントリーをはてなブックマークに追加
ビンゴゲームのシミユレーション

import java. util . random;

class BingoApp
{
public static void main (String[ ] args)
{
int trycnt = 1;                 //試行回数
     bingo bi = new Bingo ();
     randomInt ball = new RandomInt (1、99);
    bi. showCard( ) ;
    while(bi. checkCard(ball. getNext()) == ★F★ ) {
       System. out. println("----" + trycnt + "--------");
       ★G★ ;
       bi. showCard();
    }
    system. out .println("----" + trycnt + " --BINGO!--");
    bi. showCard() ;
   }
 }
class Bingo
{
int [ ] [ ] card =new int[5] [5] ;      //5*5マスのカード
   int [ ] 1check = new int[5] ; //横方向のチェックに用いる
   int [ ] vcheck = new int[5] ; //縦方向のチェックに用いる 
   int dcheck1, dcheck2;    //斜め方向のチェックに用いる 
   
public Bingo( )
{ //乱数を発生させるオブジェクト
     RandomInt ri = new RandomInt(1, 99);
     for(int i = 0 ; i < 5 ;i++){ //カードに乱数を設定
       for(int j = 0 ; j <5 ; j++){
card[i] [j] = ri. getNext( );
       }
     }
  }
  public boolean CheckCard(int no)
{
for(int i = 0 ; i < 5 ; i++){
for(int j = 0 ; j < 5 ; j++){
if(card[i] [j] == no){      //noと一致する数字がカードにあるか
          card[i] [j] = -1;        //そのマスの数字を-1にする
          return check(i, j) ;       //揃ったかどうかのチェック 
}
}
}
return false ;
  }
  Private boolean check(int i, int j)
{
1check[ ★A★ ]++;       //横方向のチェック   
if(1check[ ★A★ ] == 5 { 
return true ;
    }
    vcheck[ ★B★ ]++;       //縦方向のチェック
     if(vcheck[ ★B★ ] == 5 { 
      return true ; 
    }
    if ( ★C★ ) { //斜め方向のチェック1
      dcheck1++ ;
      if(dcheck1 == 5 { 
      return true ; 
}
    }
    if ( ★D★ ) { //斜め方向のチェック2
      dcheck2++ ;
      if(dcheck2 == 5 { 
      return true ; 
}
}
return false ;
  }
  public void showCard( )
{
for(int i = 0 ; i < 5 ; i++) {
for(int j = 0 ; j < 5 ; j++){
if(card[i] [j] == -1 {
System. out. print("●”) ;
        }
        else if (card[i] [j] < 10 { //1けたの場合
           system. out. print (" " + card [i] [j] + " ");
        }
        else{ //2けたの場合
           system. out. print(card[i] [j] + " ") ;
        }
      }
      system. out. println( ) ;
    }
   }
  }
 class RandomInt
---以後省略------------


問題
★A★から★G★を記入してください。

プログラムの内容
1から99の数字のうち、25個がランダムに(重複なく)つけられた、5*5マスのカードに
1から99の数字をランダムに選ぶ。ここで選んだ数字がカード上にあれば該当するマスを●にします。

解いていただけないでしょうか?
よろしくお願いいたします。

コメント(52)

いや、結構本気ですが。
課題が解けるかどうかは別として、コンパイル不可能な課題を出しちゃ、出題者として失格でしょ。 『Javaの課題』として出しているなら。 
今回は、基本情報の問題らしいので、紙上の問題を写したときにミスったんでしょうけど。

ところで、コンパイラ至上主義ってなんだろう? コンパイラが信用できない環境では、あまりコード書きたく無いなぁ……


G云々に関しては、trycntが別のところでインクリメントされている、と勘違いした私のミスでした。
>15

3はもちろんジョークだけど、コンパイル至上主義ってのもジョークでしょ?

コードのセンスが酷すぎる。

>while(bi. checkCard(ball. getNext()) == false) {
>   System. out. println("----" + trycnt + "--------");
>   tyrcnt++ ;
>   bi. showCard();
>}

checkメソッドで何で値をセットしれるんだ?
forも使ってないし。
インクリするくらいならfor使うでしょ、普通。
つか、番号なんてshowCard内で出力すればいいからその辺も本当はいらないんだけど。
Javaの課題でコンパイルできないってのがありえないということ。
出題者に知識が無いだけだろ。

トピが処理フローの課題ではないことは明らか。18のコメントはずれている。
また、これほど長いコードで19のような狙いはありえない。
ズレまくってるね。

つか、話が噛み合ってない。基準の話なんてしてないし。

あと、正しさの定義が曖昧だからおかしなコメントになる。要求仕様とコードが一致する正しさも、言語仕様とコードが一致する正しさもある。どちらも重要。片方を軽視するのは論外
もういいなら、そんな喧嘩売るような台詞で閉めなくてもw
まぁ、自分もどうでもいいです。
>25
職業プログラマならもっとロジカルなコメントをして欲しいのだが…。
人のコメントを批判するなら最低の理論武装くらいしてくれよ。
>17
while文については、センス悪くないと思うよ。

while(bi. checkCard(ball. getNext()) == false){

このコードからは「次のボールを取得して、カードを検査した結果が偽の間、以下の処理を行う」
と読める。ビンゴのルールを知っていれば、充分理解出来る。

試しにfor文を使っって書いてみると

for (int trycnt = 0; bi. checkCard(ball.getNext()) == false; trycnt++){
これはちょっと辛いので

for (int trycnt = 0; ; trycnt++){
if (bi. checkCard(ball.getNext()) == false) break;
がまあfor文を使った妥当なコードでしょう。

でも、なんとなくうまく表現出来ていない気がするんですね。
理由は多分、試行回数がビンゴゲームにとって重要では無いから。

for (int trycnt = 0; trycnt < MAX_TRY_CNT; trycnt++){
もし試行回数の上限が設けられていたら、見慣れた感じにはなる。

いずれにしても、実際のビンゴゲームの終了条件は「景品が無くなるまで」なので、
「変な仕様と実装」であることには変わりない。
盛り上がってますね(・´ェ`・)

穴埋め問題だったので、
穴埋め以外は先生が提示してるのかなーと思いまして、
配列の先生の再来かと思ってコメントしましたよ(・´ェ`・)b

>28
checkメソッドで値を設定するのはセンスが悪いです。
あと、if(~=false)ってのも。普通はif(~)ですしね。

>while(bi. checkCard(ball. getNext()) == false) {
>   System. out. println("----" + trycnt + "--------");
>   tyrcnt++ ;
>   bi. showCard();
>}

trycntをbiの外に出すのはあまり意味がないです。僕なら、

Bingo bi = new Bingo();
RondomInt ball = new RondomInt();
while(bi.wasEnd()){
bi.setNum(ball.getNum());
bi.show(); // 番号も出力
}
って感じにしますね。
chunは何きれてんの?
mixiは18歳未満参加禁止だよ
つーかcrewさんの言っていることの方が社会の真実
オープンソースプロジェクトにでも参加したら?
現実分かるよ
別にキレてねーよ。

つか社会の真実って何?
なんで課題トピでそんな語彙が出てくるんだよ。

KYは勘弁してくれ。
コンパイラを通るとか通らんとかの話は、結局のところ

・開発の現場で起こりうる事実を優先するか
・課題を丸投げするような初心者相手の問題という事実を優先するか

によるものと思われます。
ここは課題丸投げコミュですからね。むしろ現場の話は無しで良いと思いますよ。あくまで私見ですが。

っていうか現場の話が知りたい子は、丸投げなどしまい。w


> # つか、初めて知った、mixiが18歳未満禁止って.....ホンマなんか?

そうなんですよ。ココは大人の社交場なのです。
私が言うのもなんですが。w
>ここは課題丸投げコミュですからね。むしろ現場の話は無しで良いと思いますよ。

同意。
現場ではこうだからこの課題の答もこうだ、という類の意見は大抵ズレている。
とは言うものの。w

プログラミングを勉強してる子や、プログラマになりたての子なんかも、昔自分が苦労したのを思い出して、このコミュで回答者をしてくれてる事もあるかと思います。

質問者には意味をなさなくとも、そういう子たちにとっては、現場の話も有意義なのかなと思います。

要は、現場の話をする際には「現場の話である」と断った上でコメントを付ければ無駄に衝突が起きなくて良いかなぁと思いますよ。オジサンは。w
うわ。
マッチポンプか(笑

このトピに現場視点で語るのはズレてるけど、前置きしてあえてトピズレ覚悟で語るならいいんじゃない?
> マッチポンプか(笑

失敬な。w
大人のやり方と言ってください。w
教授が何を教えたいのかを考えていないのでは?

アルゴリズムとか考え方を教えたくて、そのためにJavaを使用しているだけなら、コンパイルとか記述方法はあまり重要なことではないと思います
ソースの細かい部分を指摘して喜んでいると、教授が課題を通して伝えたいことがぼける気がします
>アルゴリズムとか考え方を教えたくて、そのためにJavaを使用しているだけなら、コンパイルとか記述方法はあまり重要なことではないと思います

わざわざコンパイルできないコードを課題にする意図がそれ?
ありえないでしょ(笑
その意図ならJavaじゃなくてフローチャートにするだろ。
この課題のアルゴリズムが皆目検討がつかない。

最近のトピに出てくる課題をみれば講師の質が落ちていることは明らかで、要は、このトピの出題者もそれに該当するってだけだろ。
失敬。

最近は、フローチャートを教える授業がないのでは、という気がしてきた…。

だからといってコンパイルの通らない課題を出す理由にはならないけど。
コンパイルが通らない課題を出すのではなく、説明用のソースでコンパイルが通っている必要性が低いだけ
講義の内用を理解しているかを確認するだけなら、コンパイルが通ることに意味ないし
わざとバグを潜ませて悩ませる場合もありえますね
専門書とかでも、コンパイルが通らないことはありますよ
Sunの標準コーディング規約にでてくる例もコンパイルしていないでしょう

あと、大学は自分で学ぶところです。教授は教えているのではなく、学ぶヒントを与えているだけです
まぁ最近は義務教育でもプログラムやるみたいだから、大学に限定はできませんけどね


コンパイルが通らないとソースの意図が読み取れないとか、動きの予想ができないってわけでもないと思いますしぬ
さてさて、また論点がズレてきましたね。w
もうちょっとズラしてみたりして。ww

> 教授が何を教えたいのかを考えていないのでは?

この「丸投げコミュ」において、ここまで考えて回答をしてくれるのであれば、それは実際に教えている出題者(教授や講師、あるいは先生等)にとっては大変有難い話でしょう。
しかし、実際その出題者にいかなる深謀遠慮があろうとも、丸投げされている時点ですべて無駄になってしまいます。無駄にしないようにする為には、このコミュ内での回答は全て「出題者に聞け」となってしまいます。

だとしたら、このコミュの存在意義はどこにあるのでしょう?

このコミュで丸投げを回答する側が出題者の意図まで100%汲み取ろうとするのは無理ですので、やはり明確な答えがあるものと想定して回答するのが本道だろうと思います。
そして、出題者の意図とコミュで提示された回答に何らかの乖離があった場合にトピ主がそれを埋める為にあらためて考えてみれば良いのではないでしょうか。

無論、出題者の意図を想定した意見は有意義ですが、ここは「プログラミング課題丸投げコミュ」ではなくて「Javaの課題丸投げコミュ」ですから、コンパイラを通る事を前提にした意見は批判されるべきではないものと考えますが…まぁ、私見ですが。


> 最近は、フローチャートを教える授業がないのでは

開発者は自分が組み立てるだけではなくて、人に説明したり、人に説明されたりしなければなりませんからね。その手段は多くても無駄にはならないでしょうから、私はチラっとでも扱っておくべきだと思いますけど…。教育の現場ではどうなんでしょうかね?
>N蔵@FreeTibet さん

長い(笑
回答者が出題意図をきっちりと読み取れるかどうかとかコミュの性質とかは
コンパイルが通らない設問を出している教授を非難する理由にはならないと思いますよ。


回答する人が意識するかどうかは、
意識できたほうがいいけど、面倒だし難しいからそこまでしないというのは理解できます。
ただし、理解できないから批難するというのは問題外です。


コンパイラが通ることを前提とした意見を批判しているというよりも
コンパイラが通らないことを批判するのを批判している感じです。
う〜ん・・・わかりずらいですが、察してやってください(笑


>chunさん
>この課題のアルゴリズムが皆目検討がつかない。
単純にプログラムの大まかな流れを読み取れるかを見ているだけでしょう。
情報技術者試験かなにかも問題集から引っ張ってきただけの問題だと思います。
流れを読めるかどうかに主眼をおいているから、正しく動作するかは二の次にされたのでしょうね。


この問題が試験で出された時に、プログラムの細かい部分の間違えを指摘しても
得点はもらえないと思いますが、主要な流れを理解できていることが示せれば
部分点はもらえるかもしれません。
課題を解くってのはそういうことだと思いますが・・・
大学の入試試験の採点基準ってそんな感じじゃありません?
大学のランクにもよるのかもしれませんし、専門とかだとまた基準が違うのかもしれませんが・・・



と言い残すだけ言い残してみますが・・・
ここで議論してもしょうがない気がするので、
とりあえず、コンパイルが通らない課題にも正当性があると考える人がいると
心の片隅にでもとどめておいてください。
そうすれば、そのような課題を出した人に対して批難するような
稚拙なコメントも少なくなるでしょうから。
>そうすれば、そのような課題を出した人に対して批難するような
>稚拙なコメントも少なくなるでしょうから。

議論してもしょうがないって言うなら、そういう挑発は止めたら?
ウンコ触ると手につくよ!
http://life9.2ch.net/test/read.cgi/live/1141172730/
日本語って難しいですねぇ。
コンパイルが通らないから判らないと言っている訳でもないし、
>長いか?この程度で
長い ってのも、mixiの画面で見るには長いですよねぇ。
多分chunさんはそういう意図で長い って言ってたんだと思うんですけど。
わざわざエディタにコピペして考えるほどのものでも無いでしょうし。
業務で行数の単位が膨れ上がっても、別に長いと感じないですしね。
#逆に短くても酷いものは長く感じますし

> 教授が何を教えたいのかを考えていないのでは?
出題者の意図は誰にもわからないし、
そもそもコンパイルが通らないのが先生の意図なのかミスなのか、
丸投げした友達のミスなのか意図なのかはわからないわけで。

>コードのセンスが酷すぎる。
こういう処理の流れを答えさせるのに、
こんなロジック普通組まないしってちゃちゃを入れるのはどうかなぁ。
自分じゃこう組まないけど、こう組んだらここはこうでしょ
ってのを考えさせる問題だと思うので。
基本情報の問題でも、
なんでこんな方法で組むんだ ってのは山のようにありますよね?

>コンパイラ至上主義だといつか壁にぶち当たった時挫折するよ
コンパイルが通ったからって正しいわけじゃないなんて、
ココで回答している人なら判っているはずだし、
いつか壁にぶち当たるって表現は、
自分はその壁の先に居て、まわりはその壁の前に居る
と思っているから出る発言なわけで。

私個人としては、べつにコンパイル通らなくてもいいんじゃん。
と思います。が、配列の先生のことがあったので
先生のミスだったら再来かなーとワクワクしていたのは内緒です。

まぁ、穴埋めになってる時点でコンパイルとおらないんだし。(極論
ただ、どういう意図で出された問題かがわからない以上、
コンパイル通らないってのは、不親切だなぁと思いますけどね。
それすら意図に組むとなると、なんでもアリですね。課題。
>>コードのセンスが酷すぎる。
>こういう処理の流れを答えさせるのに、
>こんなロジック普通組まないしってちゃちゃを入れるのはどうかなぁ。

ちゃちを入れたのではない。センスの悪いコードは生徒に悪影響を及ぼすと言っている。

たとえば、

while(bi. checkCard(ball. getNext()) == ★F★ ) {
 System. out. println("----" + trycnt + "--------");
 ★G★ ;
 bi. showCard();


この箇所を見ただけでもいくつか問題点を指摘できる。

■(.. == ★F★)について

まず、==falseが正解とは限らないという点。トピと選択肢だけではそう断言なんてできない。つまり回答不能となる。問題として不完全。

次に、これが初心者のコードという点。普通のレベルの奴はこんな書き方をしない。還元すればこのコードはセンスが悪いってこと。あるいはパズルの類だな。
だが、まともな出題者がパズルを出したりしないだろう。とすれば単にセンスがない奴が出題者だったということになる。

■処理の流れについて

通常のプログラマなら短いコードでも処理の流れをきちんとコメントする。
ところが、このコードはwhile一行に処理詰めてしまっているためにコメントが書けない。
書かないのではなく書けない。
だから非常に可読性が低い。試験性も変更性も低い。そういうのをセンスの悪いコードという。

■ ★G★;について

もうこれはコメントするのも馬鹿らしいがtrycnt++;が正解という根拠がない。別にtrycnt=0;だっていいわけだろ。そこに
//試行回数をコンソールに出力する
とあるわけではないのだから何を書けばいいかわからない。

これは明らかに出題者の落ち度だ。
何をしろとも書いてないのだから何もコードなど書けない。まともなプログラマなら設計にないことは書かないだろ。そして設計者に確認するはずだ。この課題文もそう。確認したい。だが情報処理試験ではそれはできない。
12に「情報処理技術者試験の問題」だとの記述があるので、
これ、本来はもっと長い問題じゃないですかね?
私自身、情報処理技術者の試験問題を
あまり解いたことがある訳ではないですが、
最初に要件や仕様が長々と数ページに渡って書かれていて、
それに即して、こんなプログラム作りました、
要件と仕様を満たすよう穴を埋めなさい、
みたいな順序で出題されていたと記憶しています。
数ページの仕様や要件、なんて表現じゃ
ボリュームが伝わらないかもしれませんが、
おそらく問題文が全く足りてません。
実際、12で一部に関して問題文が追加されています。
4択なら基本情報技術者試験の午後問題ですかね。
他の設問に関しても、
おそらく、答えを何か1つに絞り込む記述と
選択肢があるはずです。

また、課題の丸投げコミュではありますが、
トピ主は別に学校の課題とは一言も言ってないようですし、
能のない教授が適当に出題したものとも言えなさそうです。
(本当に情報処理技術者試験の過去問なら尚更。)

答えが決まる決まらないとか、
コンパイルできるできないとか、
問題の質が良い悪いとか、
いろいろな意見が出ていますが、
トピ主自身が、
問題を別の人から聞いたものだとも言っている上、
内容がこのように断片的なものであるなら、
いずれの議論もどっちが正しい、という結論は
得られないと思われます。

したがって、ここは1つ、
この内容からではどうしようもない、という感じで、
丸く収まるのはいかがでしょう?w
>最初に要件や仕様が長々と数ページに渡って書かれていて、
>それに即して、こんなプログラム作りました、
>要件と仕様を満たすよう穴を埋めなさい、
>みたいな順序で出題されていたと記憶しています。

なるほど、そういうことか。
なぜこんなに不完全な問題かが疑問でしたが納得です。正直そこまで省略されているとは思わなかったので??でした。

ま、過去問はないでしょう。過去問なら解答は本にあるからこんなとこで聞かないだろうし、コードも稚拙な記述が多すぎる。おそらく講師か誰かが作った予想問題でしょう。

ログインすると、残り22件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング