質問失礼いたします。
一週間でわかるC#のチャレンジ8-1、ピタゴラス数に関する問題です。
下記のようなコードを実装したのですが、これをメインクラスとピタゴラス数であると判定をするクラスに分けたい(オブジェクト指向の利用)です。オブジェクト指向に関する知識や理解が乏しくどのように実装してよいかがわからず、何かご教授いただけたら幸いです。
個々の勝手がわかっておらず、誤りがあったら申し訳ありません。
(注)UIはButtonとtextboxが一つずつで、ボタンを押すと結果一覧がテキストボックスに出力されます。
<実装コード>
namespace WindowsFormsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int a = 0; int b = 0; int c = 0; for (a = 1; a <= 100; a++) for (b = 1; b <= 100; b++) for (c = a > b ? a : b; c <= 100; ++c) { if (a * a + b * b == c * c) { textBox1.Text += a.ToString() + " " + b.ToString() + " " + c.ToString() + Environment.NewLine; } if (a * a + b * b <= c * c) { break; } } }
提示のコードではどういう動作になるんでしょいうか。
んで、聞きたいことは何でしょうか
> オブジェクト指向に関する知識や理解が乏しくどのように実装してよいかがわからず、何かご教授いただけたら幸いです。
学習の順番が逆です。
コードを修正してオブジェクト指向を適用しようとするのではなく、まずオブジェクト指向を学び、分析・設計を行ってからコードを記述してください。
現状では質問ではなくただの作業(教育)の依頼です。
こういうサイトでお金を払って依頼しましょう。
https://menta.work/
表題「オブジェクト指向」と質問の内容はマッチしてません。質問の内容が一目でわかるような表題をつけてください。
コードは ``` と ``` で囲ってください(``` はバッククォート 3 つ)。インデントされて見やすくなるので。インデントされてないコードは質問者さん自身も読む気がしないのでは? 赤の他人の閲覧者・回答者はなおさらです。
開発環境(Visual Studio, .NET のバージョンなど)を書いてください。
問題の趣旨通りに、a*a+b*b=c*cを満たす、全てのa,b,cの組み合わせ全て(a,b,cはそれぞれ1以上100以下)
が出力されます。
現在のコードはすべての処理を一つのクラスで完結させているのですが、オブジェクト指向を理解するために、a*a+b*b=c*cを満たすかどうかという処理を別のクラスでやりたいと考えているのですが、書き方がわからないという感じです。(オブジェクト指向に関しては、実践が足らず、感覚だけ理解している状態です。)
すみません。以後気を付けます。
開発環境はVSの1012です。
何がどうなったならば,あなたの言うところの
> オブジェクト指向の利用
が達成できたということになるのでしょう?
> クラスを分けたい
だけならば,「じゃあ,好きなように分ければよくね?」としか.
もしも,
「クラスの書き方がわからない」とか
「『ピタゴラス数であると判定をするクラス』を書いたとして,それをどうやって使うのかがわからない」とかいう状態なのであれば,
まずは「オブジェクト指向がどうの」とかアバウトなことを言い出す前に,使用する言語の基礎の基礎を学ぶことを始めるべきです.
そうでないならば,「とりあえず(あなたの目指す『オブジェクト指向の利用』とは言えなくとも)クラスを分けた状態のコード」を話の出発点とする方が良いように思います.
> 以後気を付けます。
質問は後からでも編集・修正できます。今からでも遅くないので、質問欄を編集してタイトル、インデント、開発環境を書いていただきたく。
単一クラスでの処理の仕方はある程度理解はしているつもりですが、クラスを分けた状態のコードをどういう風に書けばいいのか(どこから着手すればよいのか)わかりません。現状calcクラスを作り、その中で、判定処理を行い、メインクラスで、処理を書いているメソッドを呼び出せないかと試行錯誤しているのですが、頓珍漢なことをやっているような気がします。
「一週間でわかるC#」の内容を知らないのですが、その「チャレンジ8-1」とは該当処理をクラス分けするという課題なのでしょうか?
もしそうなのであれば、そこまでにクラスに分けるという解説があるかと思いますので、それを読んで学習するということになるかと思います。
また、そのような課題ではなく、ご自身が「学習のため」自主的に行おうというのであれば、それはまだ早いのではないかと思います。
その「一週間でわかるC#」にクラスの作成等の解説があるのかは知りませんが、そのような解説が出てきてからの学習でいいのではないでしょうか?
「一週間でわかるC#」という本については以前にも質問がありましたが、検索しても発見できませんでした。本当に実在する本なのでしょうか?
同じ質問者ですか?
https://teratail.com/questions/268486
私が今取り上げているのはwebサイトです。
https://csharp.sevendays-study.com/
本に関しては存じ上げないです。
そういう場合にはちゃんとリンクしてください。これは「できれば」ではなく「必ず」で、常識の範囲に入るものですから、次からは言われずともリンクし、今回は質問を編集し直してちゃんとリンクしてください。
チャレンジ 8-1 に関してもです。
また「わかる」と「身につく」は違う言葉です。違う言葉を使うとなおさら伝わりにくくなり、プログラミングの際には致命的なエラーになります。
そちらのサイトは「一週間で身につくC#言語の基本」というサイトです。
目立つところに「一週間でわかるC#」という文字のある広告が張ってあるので分かりにくいですけどね
チャレンジ 8-1 を見ましたが、別クラスに分けるようには書いていません。関数一つで済むので、今回の問題にはクラスもオブジェクト指向も関係ありません。オブジェクト指向を学ぶのであれば、それが真価を発揮する題材を選ぶのが良いと思います。
また、練習問題から始めるのではなく、概念の理解から始めるべきです。gentaro さんのおっしゃる通り、順番が完全に逆です。
概念がわかっていないから変な問題にチャレンジするようになり、変な問題にチャレンジしているから変な質問になり、変な質問だから回答者が理解できないという流れです。
よりよくしたいという向上心は素晴らしいところですが、学問に王道(誤用じゃない方)なしとの言葉通り、短時間でどうにかなるようなものではありません。ある程度理解を助ける知識などがあれば早くはなりますが、そうでない場合はどうしても時間がかかります。さらに、同じことをやればだれでも等しく同じ程度の理解となるわけでもありません。
> オブジェクト指向に関する知識や理解が乏しくどのように実装してよいかがわからず
とのことでしたら、ある程度はオブジェクト指向に関する知識を仕入れてからコードに書くという順番になるはずです
回答1件
あなたの回答
tips
プレビュー