このコードが機能しないのはなぜですか?
質問
こんにちは、このコードを書いたのですが、2つのエラーがありました。
- 無効なランク指定子:',' または ']' が期待されます
- [] を使用したインデックス付けを 'int' 型の式に適用することはできません
手伝ってもらえますか?
static void Main(string[] args)
{
ArrayList numbers = new ArrayList();
foreach (int number in new int[12] {10,9,8,7,6,5,4,3,2,1}) //error No.1
{
numbers.Add(number);
}
numbers.Insert(numbers.Count - 1, 75);
numbers.Remove(7);
numbers.RemoveAt(6);
for(int i=0; i<numbers.Count; i++)
{
int number = (int) number[i]; // error No.2
Console.WriteLine(number);
}
}
解決
using System;
using System.Collections;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
ArrayList numbers = new ArrayList();
foreach (int number in new int[] { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 })
{
numbers.Add(number);
}
numbers.Insert(numbers.Count - 1, 75);
numbers.Remove(7);
numbers.RemoveAt(6);
for (int i = 0; i < numbers.Count; i++)
{
int number = (int)numbers[i];
Console.WriteLine(number);
}
}
}
}
他のヒント
1-new int []
と言うだけで配列の長さを指定する必要はありません。2-数字は単なる整数です。数字にアクセスしようとしています[i]
1の場合:
foreach (int number in new int[] {10,9,8,7,6,5,4,3,2,1})
2の場合:
int number = (int)numbers[i];
number
(複数)が必要な場所で number
を使用しています。
#1の場合はどうですか?
for (int x = 10; x > 0; --x)
{
numbers.Add(number);
}
これをint [12]として宣言しているにもかかわらず(明らかな意図として?)、10から1までの値のみを使用しているようです。 for
の意図がより明確な場合に、このシナリオで foreach
を使用する理由は何ですか?
配列を次のように初期化する必要があります
new int[] { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
コンパイラがサイズを設定します。しかし、あなたはそれを難しい方法でやっているのです。これを試して:
for (int i = 10; i > 0; i-- )
{
numbers.Add(i);
}
.Net 3.5 を使用している場合は、System.Linq.Enumerable を使用して範囲を作成することもできます。
IEnumerable<int> numbers = Enumerable.Range(1, 10).Reverse();
これは ArrayList の代わりになりますが、3.5 ではまったく無意味です。まだ始めたばかりなので、最初は ArrayList の方が理解しやすいと思いますが、Generics や IEnumerables などは非常に重要であることに留意してください。
所属していません StackOverflow