将 String 转换为另一个 class 中的数组名称
Convert String to the name of a array in another class
我是一名业余程序员,我想知道是否有可能以特定方式解决问题。
public class Stats {
public static int[] Hero = {20, 20, 10, 10, 10};
public static int[] Villain = {20, 20, 10, 10, 10};
public static void name(int[] name) {
//If you insert an array it will print all its values
System.out.println("Health: " + name[1] + "/" + name[0]);
System.out.println("Damage: " + name[2]);
System.out.println("Defense: " + name[3]);
System.out.println("Agility: " + name[4]);
return;
}
这是我想要使用的,如果我使用 'Hero' 或 'Villain' 调用它,它工作正常。
public class UserInterface extends JPanel implements MouseListener, MouseMotionListener {
//A lot of code in between that is not of notice right now
@Override
public void mouseClicked(MouseEvent e) {
if (" ".equals(CHESS.Board[e.getY() / squareSize][e.getX() / squareSize]) == false) {
//Checks if I pressed on a legit space on the map
String name = (CHESS.Board[e.getY() / squareSize][e.getX() / squareSize]);
//In this scenario 'name' will be a String called "Hero"
System.out.println("Name: " + name);
//Will write out 'Name: Hero'
Stats.name(Stats.Hero);
//Works fine
Stats.name(Stats.name);
//Does not work
}
}
现在我想要的是根据我点击的内容调用正确的数组。目前我只有名为 'Hero' 和 'Villain' 的数组,但最终肯定会有超过 50 个数组可供选择。显然只是写 stats.name(Stats.name);不起作用,因为名称是一个字符串,它需要一个 int[]。
但是有没有一种方法可以使用我的字符串 'name',这样我就可以在不同的 class 中调用一个名为同一事物的 int[] 数组?
不要使用字符串来标识程序中的对象。字符串是邪恶的。
直接把数组(Hero
或Villain
)放在CHESS.board
方格中)。您还需要将电路板的类型更改为 int
数组(因此它将是一个由 int 数组组成的数组)。
您应该按照 Java 约定重命名变量,使其以小写字母开头。
如果必须将字符串映射到对象,可以使用 Map
。
我认为您要做的是按名称查找对象。你不能按字面意思去做,但它很常见,你不必添加太多代码。
假设您有一个角色扮演游戏,并且您有团队成员,每个小电脑人都通过名字来识别。
Map<String,RpgPerson> team = new HashMap<>();
这里我们有一种方法可以将字符串(名称)映射到我们想要的对象(具有所有统计信息的对象)。我正在使用上面的建议来制作一个 "Person" 对象,因为它确实比使用数组更好。
这是一个简单的例子:
public class RpgPersonExample
{
public static void main( String[] args )
{
Map<String, RpgPerson> team = new HashMap<>();
team.put( "Sgt. Mayhem", new RpgPerson( 100, 10, 0 ) );
team.put( "Wizard", new RpgPerson( 100, 1, 10 ) );
team.put( "Dragon", new RpgPerson( 1000, 100, 100 ) );
System.out.println( team.get( "Dragon" ) );
System.out.println( team.get( "Wizard" ) );
}
}
class RpgPerson
{
private int hits;
private int strength;
private int magic;
public RpgPerson( int hits, int strength, int magic )
{
this.hits = hits;
this.strength = strength;
this.magic = magic;
}
@Override
public String toString()
{
return "RpgPerson{" + "hits=" + hits + ", strength=" +
strength + ", magic=" + magic + '}';
}
}
好的。所以你的问题是,根据点击的方块,你想要输出相应的日期。现在,要解决您眼前的问题,您需要做的是非常基本的(而且很丑陋)。
引入一些条件逻辑
所以你需要引入另一个if,这取决于name
的值是多少。如果 name
是 "Hero"
,则传递一个数组。
if(name.equals("Hero")) {
Stats.name(Stats.Hero)
}
如果等于Hero
,它将输出英雄的统计数据..
这里的问题
这不是很好,但也有点毫无意义。如果每个方块都有各自的名称,那你为什么不能采取不同的方法?
创建您自己的对象
public class Person {
private String name;
private int health;
// etc...
}
并创建一个 Cell
对象..
public class Cell {
private Person person;
public Cell(Person person)
{
this.person = person;
}
public Person getPerson() { return this.person; }
}
现在,您的 CHESS.Board
可以是 Cell
类型的多维数组。您可以获得正确的 Cell
,与您现在所做的完全一样,并且您可以访问与该单元格关联的 Person
对象。这种方法所做的是,它删除了条件逻辑。您可以从单元格中获取 Person
!
Cell cell = (CHESS.Board[e.getY() / squareSize][e.getX() / squareSize]);
Person person = cell.getPerson();
现在,您还可以在 Person
class 中添加一个简单的方法来打印其统计数据。
public void printStats() {
System.out.println("My name is " + this.name + " and my health is " + this.health);
}
那你就可以打电话给person.printStats()
了。这是更清晰、更少条件的逻辑,并且更紧密地遵循 Java 方法。该解决方案更具可扩展性,您不必弄清楚 Hero[3]
的含义。 (下一个处理您的代码的人也不会)。
我是一名业余程序员,我想知道是否有可能以特定方式解决问题。
public class Stats {
public static int[] Hero = {20, 20, 10, 10, 10};
public static int[] Villain = {20, 20, 10, 10, 10};
public static void name(int[] name) {
//If you insert an array it will print all its values
System.out.println("Health: " + name[1] + "/" + name[0]);
System.out.println("Damage: " + name[2]);
System.out.println("Defense: " + name[3]);
System.out.println("Agility: " + name[4]);
return;
}
这是我想要使用的,如果我使用 'Hero' 或 'Villain' 调用它,它工作正常。
public class UserInterface extends JPanel implements MouseListener, MouseMotionListener {
//A lot of code in between that is not of notice right now
@Override
public void mouseClicked(MouseEvent e) {
if (" ".equals(CHESS.Board[e.getY() / squareSize][e.getX() / squareSize]) == false) {
//Checks if I pressed on a legit space on the map
String name = (CHESS.Board[e.getY() / squareSize][e.getX() / squareSize]);
//In this scenario 'name' will be a String called "Hero"
System.out.println("Name: " + name);
//Will write out 'Name: Hero'
Stats.name(Stats.Hero);
//Works fine
Stats.name(Stats.name);
//Does not work
}
}
现在我想要的是根据我点击的内容调用正确的数组。目前我只有名为 'Hero' 和 'Villain' 的数组,但最终肯定会有超过 50 个数组可供选择。显然只是写 stats.name(Stats.name);不起作用,因为名称是一个字符串,它需要一个 int[]。
但是有没有一种方法可以使用我的字符串 'name',这样我就可以在不同的 class 中调用一个名为同一事物的 int[] 数组?
不要使用字符串来标识程序中的对象。字符串是邪恶的。
直接把数组(Hero
或Villain
)放在CHESS.board
方格中)。您还需要将电路板的类型更改为 int
数组(因此它将是一个由 int 数组组成的数组)。
您应该按照 Java 约定重命名变量,使其以小写字母开头。
如果必须将字符串映射到对象,可以使用 Map
。
我认为您要做的是按名称查找对象。你不能按字面意思去做,但它很常见,你不必添加太多代码。
假设您有一个角色扮演游戏,并且您有团队成员,每个小电脑人都通过名字来识别。
Map<String,RpgPerson> team = new HashMap<>();
这里我们有一种方法可以将字符串(名称)映射到我们想要的对象(具有所有统计信息的对象)。我正在使用上面的建议来制作一个 "Person" 对象,因为它确实比使用数组更好。
这是一个简单的例子:
public class RpgPersonExample
{
public static void main( String[] args )
{
Map<String, RpgPerson> team = new HashMap<>();
team.put( "Sgt. Mayhem", new RpgPerson( 100, 10, 0 ) );
team.put( "Wizard", new RpgPerson( 100, 1, 10 ) );
team.put( "Dragon", new RpgPerson( 1000, 100, 100 ) );
System.out.println( team.get( "Dragon" ) );
System.out.println( team.get( "Wizard" ) );
}
}
class RpgPerson
{
private int hits;
private int strength;
private int magic;
public RpgPerson( int hits, int strength, int magic )
{
this.hits = hits;
this.strength = strength;
this.magic = magic;
}
@Override
public String toString()
{
return "RpgPerson{" + "hits=" + hits + ", strength=" +
strength + ", magic=" + magic + '}';
}
}
好的。所以你的问题是,根据点击的方块,你想要输出相应的日期。现在,要解决您眼前的问题,您需要做的是非常基本的(而且很丑陋)。
引入一些条件逻辑
所以你需要引入另一个if,这取决于name
的值是多少。如果 name
是 "Hero"
,则传递一个数组。
if(name.equals("Hero")) {
Stats.name(Stats.Hero)
}
如果等于Hero
,它将输出英雄的统计数据..
这里的问题
这不是很好,但也有点毫无意义。如果每个方块都有各自的名称,那你为什么不能采取不同的方法?
创建您自己的对象
public class Person {
private String name;
private int health;
// etc...
}
并创建一个 Cell
对象..
public class Cell {
private Person person;
public Cell(Person person)
{
this.person = person;
}
public Person getPerson() { return this.person; }
}
现在,您的 CHESS.Board
可以是 Cell
类型的多维数组。您可以获得正确的 Cell
,与您现在所做的完全一样,并且您可以访问与该单元格关联的 Person
对象。这种方法所做的是,它删除了条件逻辑。您可以从单元格中获取 Person
!
Cell cell = (CHESS.Board[e.getY() / squareSize][e.getX() / squareSize]);
Person person = cell.getPerson();
现在,您还可以在 Person
class 中添加一个简单的方法来打印其统计数据。
public void printStats() {
System.out.println("My name is " + this.name + " and my health is " + this.health);
}
那你就可以打电话给person.printStats()
了。这是更清晰、更少条件的逻辑,并且更紧密地遵循 Java 方法。该解决方案更具可扩展性,您不必弄清楚 Hero[3]
的含义。 (下一个处理您的代码的人也不会)。