2015-05-04 133 views
0

我想将String转换为对象。我查找了相关主题,但找不到答案。我的代码是:java String to a object

amountShip = 5; 
String name = ReadConsole.nextString(); //-->variabe of the object "Player" 
gamers[i] = Player.String2Object(name, 0); 

Player String2Object(String name, int amountShip) { 
    Object o = name; 
    Player temp = (Player)o; 
    temp = new Player(name, amountShip); 
    return temp;    
} 

class Player { 
    Player (String name, int amountShip) { 
     name = name; 
     ships = amountShip; 
    } 
    Player pl = new Player(String name, int amountShip); 
} 

它说

java.lang.String中不能转换到Gameobjects.Player

我的目的是创建2个不同的实例名球员的对象动态。如果在“3”例如有人类型,我想提前

+3

'Object o = name; Player temp =(Player)o;'你认为这样做了什么?如果你回答它,那么你解决了你的问题。 –

+0

Java很棒,但它不能做魔术!不过,你应该真正修复格式并提供更多信息(请参阅http://stackoverflow.com/questions/3988788/what-is-a-stack-trace-and-how-can-i-use-it-to-debug - 我的应用程序,错误) – isnot2bad

回答

2

我想所有你想要的是这样吗?

Player String2Object(String name, int amountShip) { 
    return new Player(name, amountShip); 
} 

gamers[i] = Player.String2Object(name, 0); 

也许只是

gamers[i] = new Player(name, 0); 

代替或者另一种方法是从读控制台(或文件)线,并提取nameamountShipString.split功能例如。

编辑:

不能动态地创建实例像你的问题。但是你可以创建数组Player[]这样

// n is some int entered by user. 
Player[] players = new Player[n]; 
for(int i = 0; i < n; ++i) { 
    players[i] = new Player(x, y); 
} 

,然后让第i个球员像这样(假设类PlayergetName法)

players[i].getName(); 
1

String创建

Player p1 = new Player(x,y); 
Player p2 = new Player(x,y); 
Player p3 = new Player(x,y); 

感谢很多无法通过铸造转化为“斯皮勒”。相反,您可以使用Serialization,或者创建一个方法来解析某些给定输入的对象的属性。

0

你并不需要一个String转换到一个对象,因为String是一个deafault对象,因此不需要投射。你可以做到以下几点:

Player String2Object(String name, int amountShip) { 
    Player temp = new Player(name, amountShip); 
    return temp;    
} 

如果你问自己,为什么你的代码是不工作的方式,它是那是因为你正尝试将String铸造成Player。您的对象o指向String,因此当您尝试执行(Player)o时,您试图将字符串强制转换为Player,并且它们之间没有任何关系。