c# - 由于 int 数据类型的初始化,在运行时显示内存问题
问题描述
运行程序后,我只能为第一个学生插入数据,之后它只显示我应该插入的内容,但没有给我这样做的权利。没有编译错误。虽然我认为问题出在我分配变量时,但这可能是一个问题,因为我不知道是否应该用 0 初始化 int。如果我不初始化变量,我会得到很多编译错误。另外,在我的情况下,为什么它会显示带有随机数字“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()
您需要将它们作为参数传递或将它们存储在类级别而不是本地变量中;后者将需要对您的代码进行最少的更改。
进行这些更改后...
- 将
static
修饰符添加到您的字段,以便您可以从static
方法中访问它们。 studentNumber
将和age
字段的类型从 更改为string
,int
因为您将它们解析为int
。- 从、和方法中删除局部
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();
}
}
...这对我来说按预期工作。
推荐阅读
- assembly - 编码 8 位操作数大小?是否有类似 16 位的前缀?
- python - 如何在“n”个块中使用巨大的 csv 数据?
- kotlin - 科特林?vs ?.let {}
- cordova - 如何在 Cordova 中关闭应用程序后启动服务
- mysql - 是否可以通过将所需列从一个添加到另一个来避免两个表上的缓慢连接,还是我的关系不好?
- node.js - 如何将单引号内的参数传递给 postgres 查询?
- php - 登录页面不会将我移动到 php 中的欢迎页面
- reactjs - 如何过滤 React 中显示的产品数量?
- maven - 在 Eclipse 中未找到处理 avro-maven-plugin:1.8.2:idl-protocol 的市场条目。请参阅帮助以获取更多信息
- shopify - 如何使用 Liquid 获取文本文件的内容