gpt4 book ai didi

java - 如何在其范围之外使用对象

转载 作者:行者123 更新时间:2023-12-01 22:30:43 33 4
gpt4 key购买 nike

我正在创建一个口袋妖怪战斗游戏,其中我根据用户输入在 if 语句中实例化口袋妖怪对象。这显然是一个问题,因为我无法在 if 语句之外使用这些对象,但必须为每个用户创建不同的 pokemon 对象。我需要一种在 if 语句之外使用这些对象及其方法的通用方法,或者我需要另一种方法来创建与用户输入不同的对象。请记住,我是 java 的初学者,谢谢,我需要帮助,任何人的帮助将不胜感激。

代码确实很长,但这里是其中的一部分。

   if(answers == 1) {
Gible pokemon1 = new Gible("Gible","Gabite & Garchomp", "Achieving Level 24","Dragon Type","Ground Type", "Slash, Tackle, Sandtomb, Dragonclaw", "Monster & Dragon", true , "Gabite & Garchomp", "Slash!", "Tackle!" , "Sandtomb!", "Dragonclaw!", 239, 189, 179, 189, 183, 320);
System.out.println(pokemon1);
}
else {
Squirtle pokemon2 = new Squirtle("Squirtle","Wartortle & Blastoise", "Achieving Level 16","Water", "None", "Tackle, Water Gun, Hydro Pump, Skull Bash", "Monster & Water 1", true , "Wartortle & Blastoise", "Tackle!", "Water Gun!" , "Hydro Pump!", "Skull Bash!", 195, 229, 199, 227, 185, 292);
System.out.println(pokemon2);

}

if 语句只是用户输入,决定他们想要哪个神奇宝贝(#1 或 #2)。我正在创建的对象直接与返回一堆统计信息和信息的抽象类的子类相关联(基本上是我放入参数中的内容)。

最佳答案

您可以在 if 语句之外声明该对象,然后对其进行初始化。所以代替这个:

if (some test) {
PokemonObject po = new PokemonObject();
// ... use po
} else if (another test) {
PokemonObject po = new PokemonObject();
// ... use po
} else if (a third test) {
PokemonObject po = new PokemonObject();
// ... use po
}
// try to use po (doesn't compile)

改用这个:

PokemonObject po = null;
if (some test) {
po = new PokemonObject();
// ... use po
} else if (another test) {
po = new PokemonObject();
// ... use po
} else if (a third test) {
po = new PokemonObject();
// ... use po
}
if (po != null) {
// try to use po (works!)
}

编辑:如果您有专门的口袋妖怪对象类,那么您可以定义一个基类(类可以扩展)或一个接口(interface)(类可以实现)来定义所有口袋妖怪对象的共同行为。您的代码可能如下所示:

PokemonObject po = null; // base class type for Gibble and Squirtle
if (answers == 1) {
Gible pokemon = new Gible("Gible","Gabite & Garchomp", "Achieving Level 24","Dragon Type","Ground Type", "Slash, Tackle, Sandtomb, Dragonclaw", "Monster & Dragon", true , "Gabite & Garchomp", "Slash!", "Tackle!" , "Sandtomb!", "Dragonclaw!", 239, 189, 179, 189, 183, 320);
// do Gible-specific stuff here
po = pokemon;
} else {
Squirtle pokemon = new Squirtle("Squirtle","Wartortle & Blastoise", "Achieving Level 16","Water", "None", "Tackle, Water Gun, Hydro Pump, Skull Bash", "Monster & Water 1", true , "Wartortle & Blastoise", "Tackle!", "Water Gun!" , "Hydro Pump!", "Skull Bash!", 195, 229, 199, 227, 185, 292);
// do Squirtle-specific stuff here
po = pokemon;
}
// do general Pokemon stuff here
System.out.println(pokemon.getName());

如果使用基类而不是接口(interface),则基类构造函数(或多个构造函数)将仅接受那些对所有 Pokemon 对象有意义的参数。它还只会定义所有 Pokemon 对象通用的操作(例如 getName())。

顺便说一句,您的构造函数调用看起来非常复杂且容易出错。您可能想看看使用 builder pattern或相关技术来避免使用 too many parameters 的构造函数.

关于java - 如何在其范围之外使用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27812979/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com