Perché questo codice non funziona?
Domanda
Ciao ragazzi, ho scritto questo codice e ho due errori.
- Identificatore di classificazione non valido: previsto ',' o ']'
- Impossibile applicare l'indicizzazione con [] a un'espressione di tipo 'int'
Potete aiutarmi per favore?
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);
}
}
Soluzione
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);
}
}
}
}
Altri suggerimenti
1 - Non è necessario specificare la lunghezza dell'array, basta dire new int []
2 - il numero è solo un numero intero, penso che tu stia provando ad accedere ai numeri [i]
Per 1:
foreach (int number in new int[] {10,9,8,7,6,5,4,3,2,1})
Per 2:
int number = (int)numbers[i];
Stai usando numero
dove dovresti avere numeri
(plurale).
Perché non quanto segue per # 1?
for (int x = 10; x > 0; --x)
{
numbers.Add(number);
}
Nonostante lo dichiari come int [12] (come l'intento apparente?), sembra che stiamo usando solo i valori da 10 a 1, inclusi. Perché usare un foreach
in questo scenario, quando un per
è molto più chiaro nelle sue intenzioni?
Dovresti inizializzare l'array come
new int[] { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
il compilatore imposterà la dimensione per te. Ma lo stai facendo nel modo più duro. Prova questo:
for (int i = 10; i > 0; i-- )
{
numbers.Add(i);
}
Se si utilizza .Net 3.5, è anche possibile utilizzare System.Linq.Enumerable per creare un intervallo:
IEnumerable<int> numbers = Enumerable.Range(1, 10).Reverse();
Questo prenderebbe il posto di ArrayList, che è abbastanza inutile in 3.5. Da quando hai appena iniziato, ArrayList sarà probabilmente più facile da capire all'inizio, ma tieni a mente cose come Generics e IEnumerables, sono molto importanti.