由于 int 数据类型的初始化,在 运行 时间显示的内存问题
Memory problems shown at run time because of the initialisation of an int data type
在运行程序之后我只能为第一个学生插入数据,之后它只显示我应该插入的内容,但不给我这样做的权利。没有编译错误。虽然我认为问题出在我分配变量时,但这可能是一个问题,因为我不知道是否应该用 0 初始化 int。如果我不初始化变量,我会得到很多编译错误。另外,为什么它显示带有随机数的学生 phone 号码,在我的例子中是“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
您在四个不同的地方定义了名为 studentNumber
、studentName
、age
和 phoneNumber
的变量。不同方法中同名的局部变量不代表同一个存储。为了让 enterData()
读取的值能够被 displayData()
访问,您需要将它们作为参数传递或将它们存储在 class 级别的变量中,而不是本地变量;后者将需要对您的代码进行最少的更改。
进行这些更改后...
- 将
static
修饰符添加到您的字段中,以便您可以通过 static
方法访问它们。
- 将
studentNumber
和 age
字段的类型从 string
更改为 int
,因为您正在将它们解析为 int
。
- 从
enterData()
、displayData()
、[=]中删除局部studentNumber
、studentName
、age
、phoneNumber
变量30=] 方法。
...导致此代码...
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();
}
}
...这对我来说按预期工作。
在运行程序之后我只能为第一个学生插入数据,之后它只显示我应该插入的内容,但不给我这样做的权利。没有编译错误。虽然我认为问题出在我分配变量时,但这可能是一个问题,因为我不知道是否应该用 0 初始化 int。如果我不初始化变量,我会得到很多编译错误。另外,为什么它显示带有随机数的学生 phone 号码,在我的例子中是“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
您在四个不同的地方定义了名为 studentNumber
、studentName
、age
和 phoneNumber
的变量。不同方法中同名的局部变量不代表同一个存储。为了让 enterData()
读取的值能够被 displayData()
访问,您需要将它们作为参数传递或将它们存储在 class 级别的变量中,而不是本地变量;后者将需要对您的代码进行最少的更改。
进行这些更改后...
- 将
static
修饰符添加到您的字段中,以便您可以通过static
方法访问它们。 - 将
studentNumber
和age
字段的类型从string
更改为int
,因为您正在将它们解析为int
。 - 从
enterData()
、displayData()
、[=]中删除局部studentNumber
、studentName
、age
、phoneNumber
变量30=] 方法。
...导致此代码...
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();
}
}
...这对我来说按预期工作。