Проблемы с памятью, отображаемые во время выполнения из-за инициализации типа данных int - PullRequest
0 голосов
/ 27 марта 2019

После запуска программы я могу вставить данные только для первого учащегося, и после этого он отображает только то, что я должен вставить, но не дает мне на это право. Нет ошибок компиляции. Хотя я думаю, что проблема в том, когда я присваиваю переменные, это может быть проблемой, потому что я не знаю, должен ли я инициализировать int с 0 или нет. Я получаю много ошибок компиляции, если я не инициализирую переменные. Кроме того, почему он отображает телефонный номер ученика со случайным числом, «48» в моем случае?

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CustomCollections
{
    internal class Program
    {
        string studentNumber;
        string studentName;
        string age;
        int phoneNumber;

        public static void enterData()
        {
            int studentNumber, age, phoneNumber;
            string studentName;

            Console.WriteLine("Enter Student Number:");
            studentNumber = int.Parse(Console.ReadLine());

            Console.WriteLine("Enter Name:");
            studentName = Console.ReadLine();

            Console.WriteLine("Enter Age:");
            age = int.Parse(Console.ReadLine());

            Console.WriteLine("Enter phone number:");
            phoneNumber = int.Parse(Console.ReadLine());
        }

        public static void displayData()
        {
            string studentNumber=null;
            string studentName=null;
            string age=null;
            int phoneNumber=0;

            Console.WriteLine("Student Number:{0}",studentNumber);
            Console.WriteLine("Student Name:{0}",studentName);
            Console.WriteLine("Student Age:{0}", age);
            Console.WriteLine("Student phone number:{0}",phoneNumber);
            Console.ReadKey();


        }

        public static void Main(String[] args)
        {
            string studentNumber;
            string studentName;
            string age;
            int phoneNumber;
            enterData();
            displayData();
        }

    }
}

Я также покажу результат здесь:

Enter Student Number:
2
Enter Name:
seli
Enter Age:
22
Enter phone number:
2207885
Student Number:
Student Name:
Student Age:
Student phone number:48

1 Ответ

2 голосов
/ 27 марта 2019

Переменные с именами studentNumber, studentName, age и phoneNumber определены в четырех разных местах. Локальные переменные с одинаковыми именами в разных методах не представляют одно и то же хранилище. Чтобы значения, считанные enterData(), были доступны для displayData(), необходимо либо передать их в качестве параметров, либо сохранить их в переменных класса, а не в локальных переменных; последнее потребует наименьших изменений в вашем коде.

После внесения этих изменений ...

  1. Добавьте модификатор static к своим полям, чтобы вы могли получить к ним доступ из методов static.
  2. Измените тип полей studentNumber и age с string на int, поскольку вы анализируете их на int.
  3. Удалите локальные переменные studentNumber, studentName, age и phoneNumber из методов enterData(), displayData() и Main().

... что приводит к этому коду ...

internal class Program
{
    static int studentNumber;
    static string studentName;
    static int age;
    static int phoneNumber;

    public static void enterData()
    {
        Console.WriteLine("Enter Student Number:");
        studentNumber = int.Parse(Console.ReadLine());

        Console.WriteLine("Enter Name:");
        studentName = Console.ReadLine();

        Console.WriteLine("Enter Age:");
        age = int.Parse(Console.ReadLine());

        Console.WriteLine("Enter phone number:");
        phoneNumber = int.Parse(Console.ReadLine());
    }

    public static void displayData()
    {
        Console.WriteLine("Student Number:{0}", studentNumber);
        Console.WriteLine("Student Name:{0}", studentName);
        Console.WriteLine("Student Age:{0}", age);
        Console.WriteLine("Student phone number:{0}", phoneNumber);
        Console.ReadKey();
    }

    public static void Main(String[] args)
    {
        enterData();
        displayData();
    }
}

... которая работала, как и ожидалось для меня.

...