Pergunta

Olá pessoal, escrevi este código e tenho dois erros.

  1. Especificador de classificação inválida: esperado ',' ou ']'
  2. Não pode aplicar a indexação com [] a uma expressão do tipo 'int'

Você pode ajudar, por favor?

    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);
        }
    }
Foi útil?

Solução

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);
            }
        }
    }
}

Outras dicas

1 - Você não precisa especificar o comprimento da matriz, basta dizer novo Int [

2 - O número é apenas um número inteiro, acho que você está tentando acessar números [i

Por 1:

foreach (int number in new int[] {10,9,8,7,6,5,4,3,2,1})

Para 2:

int number = (int)numbers[i];

Você está usando number onde você deveria ter numbers (plural).

Por que não o seguinte para o número 1?

    for (int x = 10; x > 0; --x)
    {
        numbers.Add(number);
    }

Apesar de declarar isso como um int [12] (como a aparente intenção?), Parece que estamos usando apenas os valores de 10 a 1, inclusive. Por que usar a foreach Nesse cenário, quando um for é muito mais claro em sua intenção?

Você deve inicializar a matriz como

new int[] { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };

O compilador definirá o tamanho para você. Mas você está fazendo isso da maneira mais difícil. Experimente isso:

for (int i = 10; i > 0; i-- )
{
    numbers.Add(i);
}

Se você estiver usando o .NET 3.5, também pode usar o System.Linq.Numerable para criar um intervalo:

IEnumerable<int> numbers = Enumerable.Range(1, 10).Reverse();

Isso substituiria o Arraylist, que é bastante inútil em 3.5. Como você está apenas começando, o Arraylist provavelmente será mais fácil de entender no começo, mas mantenha em mente as coisas como genéricas e ienumerables, eles são muito importantes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top