C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[10]: C# listの番号を重複せずにシャッフルしたいです


(過去ログ 179 を表示中)

[トピック内 14 記事 (1 - 14 表示)]  << 0 >>

■102591 / inTopicNo.1)  C#
  
□投稿者/ もか (1回)-(2023/11/23(Thu) 19:36:01)

分類:[.NET 全般] 

2023/11/25(Sat) 20:12:08 編集(投稿者)
2023/11/25(Sat) 20:12:05 編集(投稿者)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sample101
{
class Program
{
/*
* HelloWorld
*/
static void Main(string[] args)
{
// コンソールにHelloWorldと表示して終了
Console.WriteLine("HelloWorld.");
}
}
}
引用返信 編集キー/
■102592 / inTopicNo.2)  Re[1]: C# listの番号を重複せずにシャッフルしたいです
□投稿者/ とっちゃん (799回)-(2023/11/23(Thu) 19:49:07)
No102591 (もか さん) に返信
> Label1.Text=arr(ary2[a],0]);//aかdかg
> Label2.Text=arr(ary2[a],1]);//bかeかh
> Label3.Text=arr(ary2[a],1]);//cかfかi

> 上記のようにしているのですが、問題が重複してしまいます。
> 何故でしょうか。
> ここでは省略していますが、選択肢から一つ選び押すとa++されて次の問題に移ります。

Label2 と Label3 で同じ値をセットしていますがそれが原因では?

引用返信 編集キー/
■102593 / inTopicNo.3)  Re[2]: C# listの番号を重複せずにシャッフルしたいです
□投稿者/ もか (2回)-(2023/11/23(Thu) 21:10:51)
No102592 (とっちゃん さん) に返信
> Label2 と Label3 で同じ値をセットしていますがそれが原因では?

返信ありがとうございます。記入ミスしておりました。
Label3の「1」を「2」に訂正しました。

訂正はしましたが重複は直りません。
私の考えでは、次の問題を表示するボタン(button1)にシャッフルするプログラムがあり、ボタンを押すたびに新しくシャッフルをしている結果重複していると思っています。
しかし、違うボタンのところにシャッフルのプログラムを書き込むとエラーが起こってしまいます。

Label1.Text=arr(ary2[a],0)
エラー→aryという名前は存在しません。

というような感じになります。
できそうで出来ないのでモヤモヤしています。

引用返信 編集キー/
■102594 / inTopicNo.4)  Re[3]: C# listの番号を重複せずにシャッフルしたいです
□投稿者/ WebSurfer (2810回)-(2023/11/23(Thu) 21:34:38)
No102593 (もか さん) に返信

> 私の考えでは、次の問題を表示するボタン(button1)にシャッフルするプログラムがあり、
> ボタンを押すたびに新しくシャッフルをしている結果重複していると思っています。
> しかし、違うボタンのところにシャッフルのプログラムを書き込むとエラーが起こってしまいます。

「ボタン」って何ですか? 質問に書いてないですよね。

「思っています」ってどういうことですか? あなたが作ったプログラムならデバッガを使って
調べればわかるのではないのですか?

コピペして試せばちゃんと動いて問題を再現できる必要最低限のサンプルコードを作ってアップ
できませんか? そうしてもらえないと話が通じないと思います。
引用返信 編集キー/
■102595 / inTopicNo.5)  Re[3]: C# listの番号を重複せずにシャッフルしたいです
□投稿者/ furu (222回)-(2023/11/23(Thu) 21:54:08)
No102593 (もか さん) に返信
> 私の考えでは、次の問題を表示するボタン(button1)にシャッフルするプログラムがあり、
> ボタンを押すたびに新しくシャッフルをしている結果重複していると思っています。
そうです。

> しかし、違うボタンのところにシャッフルのプログラムを書き込むとエラーが起こってしまいます。
arr(ary?)はbutton1clickメソッド内で宣言しているローカル変数なので
違うボタンのclickメソッド内からは見えません。

Formクラスで宣言した変数(メンバー変数)ならエラーにならなくなります。

public partial class フォーム1 : Form
{
    int[] ary1;  //メンバー変数
    private void ボタン1_Click(object sender, EventArgs e)
    {
        int[] ary2;    //ローカル変数
        ary1にアクセス可
        ary2にアクセス可
    }
    private void ボタン2_Click(object sender, EventArgs e)
    {
        ary1にアクセス可
        ary2にアクセス不可
    }
}

引用返信 編集キー/
■102596 / inTopicNo.6)  Re[4]: C# listの番号を重複せずにシャッフルしたいです
□投稿者/ WebSurfer (2811回)-(2023/11/23(Thu) 22:09:53)
No102595 (furu さん) に返信

> Formクラスで宣言した変数(メンバー変数)ならエラーにならなくなります。
>
> public partial class フォーム1 : Form
> {

どうして WinForms アプリのボタンだと分かるのですか?
引用返信 編集キー/
■102598 / inTopicNo.7)  Re[4]: C# listの番号を重複せずにシャッフルしたいです
□投稿者/ もか (3回)-(2023/11/24(Fri) 01:53:08)
> public partial class フォーム1 : Form
> {
> int[] ary1; //メンバー変数
> private void ボタン1_Click(object sender, EventArgs e)
> {
> int[] ary2; //ローカル変数
> ary1にアクセス可
> ary2にアクセス可
> }
> private void ボタン2_Click(object sender, EventArgs e)
> {
> ary1にアクセス可
> ary2にアクセス不可
> }
> }

ありがとうございます。

public partial class フォーム1 : Form
{
*/A/*[] ary = new int[](0,1,2,3,4);
*/B/* int[] ary2 = ary.OrderBy(i => Guid.NewGuid()).ToArray();
}
このようにしてみたのですがBのaryのところで「フィールド初期化子は、静的でないフィールド…’Form1’を参照できません」とエラーが出ます。
また、Aはエラーが出ないのでそのままにし、BだけをForm1_Loadのところに移動させると、やはりローカル変数ですのでエラーが起こりました。
> このようにしてみたのですがBのaryのところで「フィールド初期化子は、静的でないフィールド…’Form1’を参照できません」とエラーが出ます。
なぜこのようなエラーが起こるのでしょうか。
引用返信 編集キー/
■102599 / inTopicNo.8)  Re[5]: C# listの番号を重複せずにシャッフルしたいです
□投稿者/ とっちゃん (800回)-(2023/11/24(Fri) 02:15:06)
No102598 (もか さん) に返信
> public partial class フォーム1 : Form
> {
> */A/*[] ary = new int[](0,1,2,3,4);
> */B/* int[] ary2 = ary.OrderBy(i => Guid.NewGuid()).ToArray();
> }
このような記述をする場合は、コンパイルが通る形を推奨します。
今回の場合は、/* A */ と書くなどですね。


> このようにしてみたのですがBのaryのところで「フィールド初期化子は、静的でないフィールド…’Form1’を参照できません」とエラーが出ます。
> また、Aはエラーが出ないのでそのままにし、BだけをForm1_Loadのところに移動させると、やはりローカル変数ですのでエラーが起こりました。
>>このようにしてみたのですがBのaryのところで「フィールド初期化子は、静的でないフィールド…’Form1’を参照できません」とエラーが出ます。
> なぜこのようなエラーが起こるのでしょうか。

変数には宣言と初期化があります。
A, B ともに変数の宣言と初期化の両方を同時に行っています。

メンバー変数の宣言と同時に初期化処理を書く場合かける内容が限られます。

そのような状況にならないようにコンストラクタで
初期化処理を書くようにします。

ですが、その場合初期化順を指定できないため、参照できないというエラーが出てしまいます。

ここでは回答例として記述しておきます、この場合は、以下のような形で記述します。
詳細については、言語としてのC#を学習してください。
いわゆる入門書などでも記載があると思います。

public partial class フォーム1 : Form
{
int[] ary;
int[] ary2;
public フォーム1()
{
InitializeComponent(); // 多分あるはず
ary = new int[] { 0, 1, 2, 3, 4 };
ary2 = ary.OrderBy(i => Guid.NewGuid()).ToArray();
}
}


引用返信 編集キー/
■102600 / inTopicNo.9)  Re[5]: C# listの番号を重複せずにシャッフルしたいです
□投稿者/ WebSurfer (2812回)-(2023/11/24(Fri) 10:23:09)
No102598 (もか さん) に返信

No102594 で以下のお願いしましたけどやる気なしですか?

> コピペして試せばちゃんと動いて問題を再現できる必要最低限のサンプルコードを作ってアップ
> できませんか? そうしてもらえないと話が通じないと思います。

変数のスコープの問題は、このスレッドの課題「listの番号を重複せずにシャッフルしたい」とは
直接関係ないのでちょっと置いといて、コンソールアプリで「問題が重複してしまいます」という
部分だけ再現できるサンプルを作ってもらうのが良いと思います。
引用返信 編集キー/
■102601 / inTopicNo.10)  Re[6]: C# listの番号を重複せずにシャッフルしたいです
□投稿者/ WebSurfer (2813回)-(2023/11/24(Fri) 10:45:22)
No102543 のスレッドをたてた人と同一人物ですか?

CSV は止めて二次元配列にしたとか?
引用返信 編集キー/
■102608 / inTopicNo.11)  Re[7]: C# listの番号を重複せずにシャッフルしたいです
□投稿者/ もか (5回)-(2023/11/25(Sat) 00:47:26)
「Public Form1()」で数字をシャッフルし、そこに名前をセットして、「private void 名前()」というのを作って、そこで最初と同じように
 Label1.Text=arr(ary2[a],0]);
と書き込むと無事重複せずにシャッフルできました!
皆さんありがとうございました。
引用返信 編集キー/
■102610 / inTopicNo.12)  Re[8]: C# listの番号を重複せずにシャッフルしたいです
□投稿者/ WebSurfer (2814回)-(2023/11/25(Sat) 08:35:31)
No102608 (もか さん) に返信

>  Label1.Text=arr(ary2[a],0]);
> と書き込むと無事重複せずにシャッフルできました!

コンパイルも通らないのでは? arr は string の二次元配列だったはず。
引用返信 編集キー/
■102611 / inTopicNo.13)  Re[9]: C# listの番号を重複せずにシャッフルしたいです
□投稿者/ もか (7回)-(2023/11/25(Sat) 20:09:17)
2023/11/25(Sat) 20:15:06 編集(投稿者)
2023/11/25(Sat) 20:15:03 編集(投稿者)

No102610 (WebSurfer さん) に返信
> ■No102608 (もか さん) に返信
> コンパイルも通らないのでは? arr は string の二次元配列だったはず。
できましたよ笑笑
解決済み
引用返信 編集キー/
■102612 / inTopicNo.14)  Re[10]: C# listの番号を重複せずにシャッフルしたいです
□投稿者/ WebSurfer (2815回)-(2023/11/25(Sat) 21:35:18)
No102611 (もか さん) に返信

>>コンパイルも通らないのでは? はず。
> できましたよ笑笑

ウソ

一番最初の質門では arr は string の二次元配列だった。

それを隠すためも書き換えたようだけど、何考えてるの?
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -