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

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

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

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

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

2212閲覧

「現在のコンテキストに'vs'という名前は存在しません」の解消方法(vsは配列です)

akicii

総合スコア5

C#

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

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/04/05 06:48

前提・実現したいこと

任意のマス数を設定できるビンゴカードを作成しています。
Program.cs
Bingo.cs
の2つのクラスから作成をしているのですが、
Bingo.csのShowメソッド内の配列vsで
「現在のコンテキストに'vs'という名前は存在しません」
というエラーが出ており、コンパイルできません。

vsはBingoクラス内で定義しているのですが
同じクラス内でもメソッドが異なると使用できないのでしょうか?

ご指導いただけると幸いです。

発生している問題・エラーメッセージ

Bingo.csの64行目

現在のコンテキストに'vs'という名前は存在しません

該当のソースコード

C#

1//Program.cs 2 3using System; 4using System.Collections.Generic; 5using System.Linq; 6using System.Text; 7using System.Threading.Tasks; 8 9namespace Sample_200405 10{ 11 class Program 12 { 13 public static void Main(string[] args) 14 { 15 int com; 16 do 17 { 18 //---以下本文--- 19 20 Bingo bin = new Bingo(); 21 22 //ビンゴカードのマス数の入力 23 Console.Write("BINGO SIZE:"); 24 bin.size = int.Parse(Console.ReadLine()); 25 26 //ビンゴ用乱数の作成 27 bin.Init(bin.size); 28 29 //ビンゴカードの作成 30 bin.Show(); 31 32 //---以上本文終了--- 33 34 Console.WriteLine(); 35 Console.WriteLine(); 36 Console.WriteLine("Continue? YES:1, NO:other key"); 37 com = int.Parse(Console.ReadLine()); 38 } 39 while (com == 1); 40 Console.WriteLine("FINISH!"); 41 42 } 43 } 44}

C#

1//Bingo.cs 2 3using System; 4using System.Collections.Generic; 5using System.Linq; 6using System.Text; 7using System.Threading.Tasks; 8 9 10namespace Sample_200405 11{ 12 public class Bingo 13 { 14 public int size; 15 public int csize; 16 17 //ビンゴ用乱数の作成 18 public void Init(int size) 19 { 20 csize = size * size; 21 //乱数の作成 22 Random rnd = new Random(); 23 24 int[] vs = new int[csize]; 25 int i = 0; 26 27 while(true) 28 { 29 vs[i] = rnd.Next(1, 100); 30 int k = 0; 31 32 while(k<i) 33 { 34 if(vs[i] == vs[k]) 35 { 36 break; 37 } 38 k++; 39 } 40 41 if(i == k) 42 { 43 Console.Write("{0} ", vs[i]); 44 i++; 45 } 46 47 if(i == csize) 48 { 49 break; 50 } 51 } 52 53 Console.WriteLine("OK!"); 54 Console.WriteLine(); 55 56 } 57 58 //カードの作成 59 public void Show() 60 { 61 //乱数をsize×size表示 62 for (int k = size; k <= csize; k = k + size) 63 { 64 for (int l = k - size; l < k; l++) 65 { 66 Console.Write("{0,2:d} ", vs[l]); 67 } 68 Console.WriteLine(); 69 } 70 } 71 72 } 73} 74

試したこと

vsと同様の配列をShowメソッドに作成

補足情報(FW/ツールのバージョンなど)

以下の本の練習問題です
「1週間でC#の基礎が学べる本」P.183

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

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

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

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

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

guest

回答3

0

ベストアンサー

class Bingo { private int[] vs; public void Init() { this.vs = new int[csize]; } }

こんな感じ

投稿2020/04/05 06:54

Q71

総合スコア995

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

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

akicii

2020/04/05 07:02

ご回答ありがとうございました。 一番早くご回答をいただけたので ベストアンサーにさせていただきました。
Q71

2020/04/05 09:18

変数には「有効範囲」があります。どこで宣言したものは、どの範囲に有効か、きちんと覚えてください。これは「覚えておかなければならないこと」です。
guest

0

参考にした本の内容は分かりませんが、、

Bingo.csの64行目

とは、メソッド show()Console.Write("{0,2:d} ", vs[l]); の行でしょうか?
とすると、show()の中から、参照できる vs と言う変数は無いので、当然、エラーとなります。なお、Init()の中にで使用されている vs は、init()の中のみで有効です。
init()int[] vs = new int[csize];vs = new int[csize];とし、メソッドの外部(public int csize;とかと同じ場所)でint[] vs; と宣言すれば、動くと思いますが、意図したものかは分かりません。

投稿2020/04/05 07:01

pepperleaf

総合スコア6385

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

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

akicii

2020/04/05 07:05

ご回答ありがとうございます。 int[] vs; をメソッド外で定義すると実行できました。
guest

0

メソッドの中で定義してるものはそのメソッドの中でしか使えません
基本的に、変数は、定義している同じカッコ{}の中だけしか有効ではないと覚えときましょう。
括弧の外では未定義となります

#例外はいくつかありますが

投稿2020/04/05 06:55

y_waiwai

総合スコア88042

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

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

akicii

2020/04/05 07:05

ご回答ありがとうございました。 変数は定義している{}の中でしか有効でないことを覚えておきます。 ご指導ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問