【问题标题】:First Steps using Arrays in C#在 C# 中使用数组的第一步
【发布时间】:2015-08-21 02:54:31
【问题描述】:

我正在尝试实现数组,以便我的程序可以保存任意数量的数据,这相当于 C#

 int nT, i;
cTrabajador *apTrabajador;
do{
        cout<<"\t Indique el numero de Trabajadores: ";
        cin>>nT;
        }while(nT<=0||nT>=40);
        apTrabajador=new cTrabajador[nT];
for(i=0;i<nT;i++)
        apTrabajador[i].leer();/
        system("cls");
        cout<<"\t Lista de  Trabajadores"<<endl;
for(i=0;i<nT;i++)
        apTrabajador[i].imprimir ();
        delete[]apTrabajador;
        system("pause");
        return 0;

我曾经在 C++ 中编程,该程序存储 nT 个数组以便拥有“trabajadores”的所有数据,所以我试图理解我现在在 C# 中在 C++ 中学习的语法,我很乐意欢迎一些帮助

Registro 是类中向用户请求数据的方法,Imprimir 是同一类中的另一个方法,用于将存储的数据打印到数组中

    namespace Poligono
    {
    class Program
    {
        static void Main(string[] args)
        {
            int i,n;
            int[] Calculos;

            Console.WriteLine("\n Insert the number of items");
            string entry = Console.ReadLine();
            int.TryParse(entry, out n);
            Calculos = new int[n];

            for (i = 0; i < n; i++){
                 VolumenPrisma.Registro();      //needs to be stored in "n" arrays
                }
            for (i = 0; i < n; i++){
                 VolumenPrisma.Imprimir();      //needs to be stored in "n" 
                }
        }
    }
    }

/* 类是 */

namespace Poligono
{
public class VolumenPrisma
{
public static int Apotema, TamLado, NumLados, Altura, Lado;
public static int Perimetro, Area, Volumen;

public static int cPerimetro (int NumLados, int Lado){
    int P;
    P=(NumLados*Lado);
    return P;    
}

public static int cVolumen(int Area, int Altura)
{
    int V;
    V = Area * Altura;
    return V;
}

public static int cArea(int Perimetro, int Apotema)
{
    int A;
    A = (Perimetro * Apotema)/2;
    return A;
}

public static void Registro(){
        Console.WriteLine("Indique No. de lados: ");
        VolumenPrisma.Lado = Int32.Parse(Console.ReadLine());

        Console.WriteLine("Indique tamanio de apotema: ");
        VolumenPrisma.Apotema = Int32.Parse(Console.ReadLine());    

        Console.WriteLine("Indique tamanio de lado: ");
        VolumenPrisma.TamLado = Int32.Parse(Console.ReadLine());

        Console.WriteLine("Indique la altura: ");
        VolumenPrisma.Altura = Int32.Parse(Console.ReadLine());
        Console.WriteLine("----------------------------------------");

        Perimetro= cPerimetro(TamLado, Lado);   
        Area = cArea(Perimetro, Apotema);
        Volumen = cVolumen(Area, Altura);
}

public static void Imprimir() {
    Console.WriteLine("Lados= {0} ", Lado);
    Console.WriteLine("Tam Lado = {0} ", TamLado);
    Console.WriteLine("Apotema = {0} ", Apotema);
    Console.WriteLine("Perimetro = {0} ", Perimetro);
    Console.WriteLine("Area = {0} ", Area);
    Console.WriteLine("Volumen = {0} ", Volumen);
}
}
}

【问题讨论】:

  • 上次我检查过,int 类型没有意大利语/西班牙语/葡萄牙语成员函数;) Calculos[i] 是 int 类型。你可能想要:Calculos[i] = VolumenPrisma.Registro() 或其他东西。
  • Registro() 和 imprimir() 都是静态方法,我跳过了类以使代码更短,我将使用该方法的简短示例更新条目
  • 向我们展示 Registro() 和 imprimir() 会容易得多。 BitTickler 或许也有你的答案。
  • 如果VolumenPrisma是一个静态类,其中Registro()Imprimir()是以int为参数的静态方法,则使用VolumenPrisma.Registro(Calculos[i]);
  • 你试图调用一个类的 void 方法。从 Calculos[i].VolumenPrisma.Registro(); 更改它到 VolumenPrisma.Registro();和另一个分别。 Thsoe 2 方法返回 void / nothing 不是 int。

标签: c# arrays pointers


【解决方案1】:

首先,您需要使用 VolumenPrisma 的实例数组,因为您需要将输入数据存储在某处。

VolumenPrisma[] Calculos = new VolumenPrisma[n]();

然后你通过使用“注册”(获取输入参数)这些数据:

for (i = 0; i < n; i++)
{
    Calculos[i] = new VolumenPrisma();    // create a new instance to store the data
    VolumenPrisma.Registro(Calculos[i]);      //get the parameters for this prisma
}

for (i = 0; i < n; i++)
{
    VolumenPrisma.Imprimir(Calculos[i]);      //Print results for that prisma
}

完整的代码如下:

namespace Poligono
{
    class Program
    {
        static void Main(string[] args)
        {
            int i, n;
            VolumenPrisma[] Calculos;

            Console.WriteLine("\n Insert the number of items");
            string entry = Console.ReadLine();
            int.TryParse(entry, out n);
            Calculos = new VolumenPrisma[n];

            for (i = 0; i < n; i++)
            {
                Calculos[i] = new VolumenPrisma();    // create a new instance to store the data
                VolumenPrisma.Registro(Calculos[i]);      //get the parameters for this prisma
            }

            for (i = 0; i < n; i++)
            {
                VolumenPrisma.Imprimir(Calculos[i]);      //Print results for that prisma
            }
        }
    }
}

要使用 VolumenPrisma 类中的静态方法,您需要将 VolumenPrisma 实例作为参数传递并修改实例字段的访问器。

public class VolumenPrisma
{
    public int Apotema, TamLado, NumLados, Altura, Lado;
    public int Perimetro, Area, Volumen;

    public VolumenPrisma()
    {
    }

    public static int cPerimetro (int NumLados, int Lado)
    {
        int P;
        P=(NumLados*Lado);
        return P;    
    }

    public static int cVolumen(int Area, int Altura)
    {
        int V;
        V = Area * Altura;
        return V;
    }

    public static int cArea(int Perimetro, int Apotema)
    {
        int A;
        A = (Perimetro * Apotema)/2;
        return A;
    }

    public static void Registro(VolumenPrisma prisma)
    {
        Console.WriteLine("Indique No. de lados: ");
        prisma.Lado = Int32.Parse(Console.ReadLine());

        Console.WriteLine("Indique tamanio de apotema: ");
        prisma.Apotema = Int32.Parse(Console.ReadLine());

        Console.WriteLine("Indique tamanio de lado: ");
        prisma.TamLado = Int32.Parse(Console.ReadLine());

        Console.WriteLine("Indique la altura: ");
        prisma.Altura = Int32.Parse(Console.ReadLine());
        Console.WriteLine("----------------------------------------");

        prisma.Perimetro = cPerimetro(prisma.TamLado, prisma.Lado);
        prisma.Area = cArea(prisma.Perimetro, prisma.Apotema);
        prisma.Volumen = cVolumen(prisma.Area, prisma.Altura);
    }

public static void Imprimir(VolumenPrisma prisma) { 
        Console.WriteLine("Lados= {0} ", prisma.Lado);
        Console.WriteLine("Tam Lado = {0} ", prisma.TamLado);
        Console.WriteLine("Apotema = {0} ", prisma.Apotema);
        Console.WriteLine("Perimetro = {0} ", prisma.Perimetro);
        Console.WriteLine("Area = {0} ", prisma.Area); 
        Console.WriteLine("Volumen = {0} ", prisma.Volumen);
       }
}

但我同意这听起来有点奇怪,而且使用非静态方法会容易得多。

【讨论】:

  • 这行不通,因为VolumenPrisma.Registro()(以及该类中的所有其他成员)是static
  • @GoatZero 从您的所有代码中删除单词 static
  • 您不需要解决方法,只需从静态方法/变量更改为非静态方法/变量。
  • 删除静态,不知何故弄乱了我所有的代码,我无法从主访问方法和属性
  • @GoatZero 添加了将这些方法作为静态方法使用的解决方案。
猜你喜欢
  • 2016-06-01
  • 1970-01-01
  • 2014-12-24
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-06
相关资源
最近更新 更多