- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我开始学习面向对象编程,但我在理解所有这些元素之间的关系时遇到了一些困难。
我正在构建一个带有 RPG 风格战斗的简单文字游戏。
为此我有几个类,包括一个用于:
武器:
class Weapon
{
private string _name;
private int _mindamage;
private int _maxdamage;
public string Name { get { return _name; } set { _name = value; } }
public int MaxDamage { get { return _maxdamage; } set { _maxdamage = value; } }
public int MinDamage { get { return _mindamage; } set { _mindamage = value; } }
public Weapon(int mindamage, int maxdamage, string name)
{
this._name = name;
this._mindamage = mindamage;
this._maxdamage = maxdamage;
}
}
字符:
class Character
{
private string _name;
private int _life;
private Weapon _weapon;
public string Name { get { return _name; } set { _name = value; } }
public int Life { get { return _life; } set { _life = value; } }
public Weapon Weapon { get { return _weapon; } set { _weapon = value; } }
public Character(string name, Weapon weapon)
{
_name = name;
_weapon = weapon;
_life = 100;
}
还有我正在努力解决的问题:这是一个表示列表中一组字符的类:
class Company
{
private int _size;
private List<Character> _members;
public int Size { get { return _size; } set { _size = value; } }
public List<Character> Members { get { return _members; } set { _members = value; } }
public Company(string[] names, Weapon[] weapons)
{
int length = names.Length;
List<Character> _members = new List<Character>();
for (int i = 0; i < length; i++)
{
_members.Add(new Character(names[i], weapons[i]));
Console.WriteLine("added {0} to character list", _members[i].Name);
}
Console.WriteLine("characters {0} and {1} exist after the for", _members[0].Name, _members[1].Name);
_size = length;
}
}
这段代码编译得很好,但是当它执行时,如果我尝试访问列表中的角色名称,它会在我的 Program.cs 类中抛出一个错误,例如:
static void Main(string[] args)
{
Weapon anduril = new Weapon(55, 80, "Anduril");
Weapon hache = new Weapon(25, 60, "hache");
Weapon lame = new Weapon(30, 50, "lame");
Weapon arc = new Weapon(30, 40, "arc");
string[] gentils = { "Aragorn", "Legolas", "Gimli" };
string[] méchants = { "Lurtz", "Berserk", "UrukA" };
Weapon[] armes = { anduril, arc, hache };
Weapon[] armes2 = { lame, lame, arc };
Company Communauté = new Company(gentils, armes);
Company Uruks = new Company(méchants, armes2);
Console.WriteLine(Communauté.Members[0].Name);
最后一行抛出一个空对象错误。如您所见,我在我的 Company
构造函数中放置了一些 Console.WriteLine
调用,以确保构造函数实际上将 Character
添加到 >List
,它起作用了。那么问题是什么?
这与我为 Members 编写 getter/setter 的方式有关吗?
最佳答案
List<Character> _members = new List<Character>();
这声明了一个名为 _members
的新本地,但您打算做的是初始化字段 _members
。该字段从未初始化,因此当您访问其成员时,会出现空引用异常。
所以不要那样做。应该是
this._members = new List<Character>();
或者更好的是,在声明中对其进行初始化。
但真正要点是:今天是学习使用调试器的好日子。您对程序的作用有一定的假设。这些假设是错误的。通过在调试器中观察程序并在每一步验证您的假设是否有效,您将很快找到错误。盯着代码看一个小时,然后放弃,问 Stack Overflow 与在调试器中运行代码相比,这是一种非常糟糕的调试技术。打印出程序的状态是很好的第一步,但实际观看程序运行会更好。
关于C# 试图访问一个对象的属性抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37630568/
来自 java docs 公共(public) FileWriter(String fileName) 抛出 IOException 抛出: IOException - 如果指定的文件存在但它是目录而
我使用以下代码将我的 .net 客户端(基于 CQL)连接到 3 节点 Cassandra 集群。我以 30 条记录/秒的速度(从 RabbitMQ)获取数据,并且它们顺利地存储在 cassandra
如果在读取文件时缺少字段,我应该捕获 NoSuchElementException。如果缺少一个字段,我只需要跳到文件的下一行。我的问题是,我在哪里实现我的 try/catch 代码来做到这一点?这是
我正在尝试使用 ASP.NET MVC 实现 OpeinID 登录。我正在尝试按照 http://blog.nerdbank.net/2008/04/add-openid-login-support-
学习使用 Java 进行 xml 解析,并且正在编写一个测试程序来尝试各种东西。所有测试 System.out.println() 都是我在控制台中所期望的,除了 childElement 返回 [n
我正在尝试使用 SwingUtilities 创建 JFrame Thread tt = new Thread(new Runnable() { public void run
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我写了这段代码: MethodInfo method2 = typeof(IntPtr).GetMethod( "op_Explicit", Bind
我开始学习 Java,并且正在根据书本做一些练习。在执行此操作时,我遇到了以下错误:线程“main”java.util.InputMismatchException 中出现异常。我正在编写一个简单的程
我有一个文本文件,其中前两行是整数 m 和 n,然后有 m 行,每行都有 n 管道分隔值。我编写了一个程序,读取文件并使用文件中的值创建 m*n 数组,它工作了无数次,然后突然,使用相同的代码,使用相
所以我尝试使用在另一个类中生成的 bean 以在主应用程序中使用 package com.simon.spring.basics.properties; import org.spri
我还没有完成这个应用程序,但我希望在我的手机上看到它的样子。但是,它会强制关闭并引发 InstantiationException。 logcat 异常: 09-19 20:13:47.987: D/
我想从 UIViewController 加载一个基于 SwiftUI 的 View ,该 View 读取包本地的 json。仅 swiftUI 项目中的代码和绑定(bind)工作正常,当我利用 UI
'java.net.SocketTimeoutException:连接超时' 循环一段时间后我收到此错误。为什么我会收到 SocketTimeoutException?我该如何修复这个错误? @Ove
当有 null 值时抛出 ArgumentNullException() 是个好主意吗? This thread 没有提到在 null 上抛出的最明显的异常。 谢谢 最佳答案 ArgumentNull
我得到这个异常: NullReferenceException Object reference not set to an instance of an object at Namespace
所以其中一个方法的描述如下: public BasicLinkedList addToFront(T data) This operation is invalid for a sorted list
我正在使用 Intellij Idea,当我去生成 JavaDocs(通过工具 -> 生成 JavaDoc)时,我抛出了一个 IllegealArgumentException,没有关于发生了什么问题
我正在学习 C++ 中的互斥锁,但以下代码(摘自 N. Josuttis 的“C++ 标准库”)有问题。 我不明白为什么它会阻塞/抛出除非我在主线程中添加this_thread::sleep_for(
我正在试验 JavaFX 标签和组,通过鼠标拖动将它们移动到屏幕上。新节点从一些线程添加到动画组。但是,有时我会突然看到以下异常 - 我假设,当某些节点重叠时。但是不知道是什么问题……因为不涉及我的代
我是一名优秀的程序员,十分优秀!