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

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

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

675閲覧

C#オブジェクト指向

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/06/15 04:43

編集2020/06/15 05:07

質問失礼いたします。
一週間でわかる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; } } }

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

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

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

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

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

y_waiwai

2020/06/15 04:45

提示のコードではどういう動作になるんでしょいうか。 んで、聞きたいことは何でしょうか
gentaro

2020/06/15 04:49

> オブジェクト指向に関する知識や理解が乏しくどのように実装してよいかがわからず、何かご教授いただけたら幸いです。 学習の順番が逆です。 コードを修正してオブジェクト指向を適用しようとするのではなく、まずオブジェクト指向を学び、分析・設計を行ってからコードを記述してください。 現状では質問ではなくただの作業(教育)の依頼です。 こういうサイトでお金を払って依頼しましょう。 https://menta.work/
退会済みユーザー

退会済みユーザー

2020/06/15 04:50

表題「オブジェクト指向」と質問の内容はマッチしてません。質問の内容が一目でわかるような表題をつけてください。 コードは ``` と ``` で囲ってください(``` はバッククォート 3 つ)。インデントされて見やすくなるので。インデントされてないコードは質問者さん自身も読む気がしないのでは? 赤の他人の閲覧者・回答者はなおさらです。 開発環境(Visual Studio, .NET のバージョンなど)を書いてください。
退会済みユーザー

退会済みユーザー

2020/06/15 04:51

問題の趣旨通りに、a*a+b*b=c*cを満たす、全てのa,b,cの組み合わせ全て(a,b,cはそれぞれ1以上100以下) が出力されます。 現在のコードはすべての処理を一つのクラスで完結させているのですが、オブジェクト指向を理解するために、a*a+b*b=c*cを満たすかどうかという処理を別のクラスでやりたいと考えているのですが、書き方がわからないという感じです。(オブジェクト指向に関しては、実践が足らず、感覚だけ理解している状態です。)
退会済みユーザー

退会済みユーザー

2020/06/15 04:53

すみません。以後気を付けます。 開発環境はVSの1012です。
fana

2020/06/15 04:57

何がどうなったならば,あなたの言うところの > オブジェクト指向の利用 が達成できたということになるのでしょう? > クラスを分けたい だけならば,「じゃあ,好きなように分ければよくね?」としか. もしも, 「クラスの書き方がわからない」とか 「『ピタゴラス数であると判定をするクラス』を書いたとして,それをどうやって使うのかがわからない」とかいう状態なのであれば, まずは「オブジェクト指向がどうの」とかアバウトなことを言い出す前に,使用する言語の基礎の基礎を学ぶことを始めるべきです. そうでないならば,「とりあえず(あなたの目指す『オブジェクト指向の利用』とは言えなくとも)クラスを分けた状態のコード」を話の出発点とする方が良いように思います.
退会済みユーザー

退会済みユーザー

2020/06/15 04:59

> 以後気を付けます。 質問は後からでも編集・修正できます。今からでも遅くないので、質問欄を編集してタイトル、インデント、開発環境を書いていただきたく。
退会済みユーザー

退会済みユーザー

2020/06/15 05:11

単一クラスでの処理の仕方はある程度理解はしているつもりですが、クラスを分けた状態のコードをどういう風に書けばいいのか(どこから着手すればよいのか)わかりません。現状calcクラスを作り、その中で、判定処理を行い、メインクラスで、処理を書いているメソッドを呼び出せないかと試行錯誤しているのですが、頓珍漢なことをやっているような気がします。
YAmaGNZ

2020/06/15 05:18

「一週間でわかるC#」の内容を知らないのですが、その「チャレンジ8-1」とは該当処理をクラス分けするという課題なのでしょうか? もしそうなのであれば、そこまでにクラスに分けるという解説があるかと思いますので、それを読んで学習するということになるかと思います。 また、そのような課題ではなく、ご自身が「学習のため」自主的に行おうというのであれば、それはまだ早いのではないかと思います。 その「一週間でわかるC#」にクラスの作成等の解説があるのかは知りませんが、そのような解説が出てきてからの学習でいいのではないでしょうか?
Zuishin

2020/06/15 05:43 編集

「一週間でわかるC#」という本については以前にも質問がありましたが、検索しても発見できませんでした。本当に実在する本なのでしょうか? 同じ質問者ですか? https://teratail.com/questions/268486
退会済みユーザー

退会済みユーザー

2020/06/15 05:46

私が今取り上げているのはwebサイトです。 https://csharp.sevendays-study.com/ 本に関しては存じ上げないです。
Zuishin

2020/06/15 05:55 編集

そういう場合にはちゃんとリンクしてください。これは「できれば」ではなく「必ず」で、常識の範囲に入るものですから、次からは言われずともリンクし、今回は質問を編集し直してちゃんとリンクしてください。 チャレンジ 8-1 に関してもです。
Zuishin

2020/06/15 05:52

また「わかる」と「身につく」は違う言葉です。違う言葉を使うとなおさら伝わりにくくなり、プログラミングの際には致命的なエラーになります。
YAmaGNZ

2020/06/15 05:54

そちらのサイトは「一週間で身につくC#言語の基本」というサイトです。 目立つところに「一週間でわかるC#」という文字のある広告が張ってあるので分かりにくいですけどね
Zuishin

2020/06/15 06:03 編集

チャレンジ 8-1 を見ましたが、別クラスに分けるようには書いていません。関数一つで済むので、今回の問題にはクラスもオブジェクト指向も関係ありません。オブジェクト指向を学ぶのであれば、それが真価を発揮する題材を選ぶのが良いと思います。 また、練習問題から始めるのではなく、概念の理解から始めるべきです。gentaro さんのおっしゃる通り、順番が完全に逆です。 概念がわかっていないから変な問題にチャレンジするようになり、変な問題にチャレンジしているから変な質問になり、変な質問だから回答者が理解できないという流れです。
len_souko

2020/06/15 08:20

よりよくしたいという向上心は素晴らしいところですが、学問に王道(誤用じゃない方)なしとの言葉通り、短時間でどうにかなるようなものではありません。ある程度理解を助ける知識などがあれば早くはなりますが、そうでない場合はどうしても時間がかかります。さらに、同じことをやればだれでも等しく同じ程度の理解となるわけでもありません。 > オブジェクト指向に関する知識や理解が乏しくどのように実装してよいかがわからず とのことでしたら、ある程度はオブジェクト指向に関する知識を仕入れてからコードに書くという順番になるはずです
guest

回答1

0

ベストアンサー

何が何だか…? な雰囲気ですが,
とりあえず勝手に状況を想像してのアドバイスを書いておきます.


オブジェクト指向

まず,「オブジェクト指向」という語を忘れてください.
現状では,そのようなナニカについて考えたり拘ることは百害あって一利ないように思えます.


クラスに分けたい

現在のコードに対してですが… 以下の順で変更を加えていくと Step by step な感じで良いのでは?と思います.

  1. 「ピタゴラス数であると判定をする」処理を,「Form1クラスのメソッドとして」で良いので,メソッドとして実装してください.

素直に書けば,「3つの数値を引数に取り,判定結果を戻り値で返す」ようなものになるかと.
2. button1_Click内の処理を,上記のメソッドを使用する形に変更してください.
3. ここまでできたら,上記のメソッドを「他のクラス」に移動させてください.

投稿2020/06/15 05:26

編集2020/06/15 05:28
fana

総合スコア11996

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問