布尔元';t在if语句之后初始化,当从Java中的另一个类调用时仍然为false
我正在尝试制作一个基于文本的游戏。我把我学到的东西付诸实践 当你读到我的问题时,你可能会感到困惑。我的问题包含的方法尚未在它们的工作中解释。这样就不会太混乱了。每段代码都有一个描述,说明它有哪些方法以及它们的作用 我的问题:我有一个名为CharStartingPoint的类,这个类是我游戏的主要起点。在类内部,我调用choose();方法,它是来自类CharObe的方法,然后是setingnpc();和bbs();方法,这两个方法都来自CharWosna类。bbs();方法只返回一个布尔引用的player1hassieldbo,并打印出字符串player1hassield。(玩家1Hasshield和玩家1Hasshieldbo来自CharObe类,玩家2Hasshieldbo来自CharWosna类)。当选择()时;调用,并且玩家对问题“你有盾牌吗?”键入yes,如果if语句看到用户键入yes,它将调用名为setPlayerShieldTrue(布尔hassild)的方法;并传递player1hassieldbo,设置player1hassieldbo=true。如果我键入System.out.println(player1.player1hassieldbo);和布尔元';t在if语句之后初始化,当从Java中的另一个类调用时仍然为false,java,Java,我正在尝试制作一个基于文本的游戏。我把我学到的东西付诸实践 当你读到我的问题时,你可能会感到困惑。我的问题包含的方法尚未在它们的工作中解释。这样就不会太混乱了。每段代码都有一个描述,说明它有哪些方法以及它们的作用 我的问题:我有一个名为CharStartingPoint的类,这个类是我游戏的主要起点。在类内部,我调用choose();方法,它是来自类CharObe的方法,然后是setingnpc();和bbs();方法,这两个方法都来自CharWosna类。bbs();方法只返回一个布尔引用的p
System.out.println(player1.player1HasShield);从类CharStartingPoint,它打印出true和yes。类CharStartingPoint访问CharObe的变量没有问题。当CharWosna类尝试访问CharObe的变量时,CharWosna可以访问它们,但它们没有初始化,为什么?????要查看此问题,当方法设置npc()时;调用时,如果player2hassieldbo为true,则player2hassieldbo设置为true。在本例中,player2HasShieldBo设置为false,因为类CharWosna从类CharObe访问了player1HasShieldBo,但是它没有初始化,尽管它在前面已经初始化过。从类CharWosna访问时,字符串播放器1hasshield打印空值。为什么 player1属于CharObe类型,并且具有CharObe构造函数。
player2属于CharWosna类型,并且具有CharWosna的构造函数 这是我的代码,分块讲解 类CharObe: 选择();方法:choose方法询问用户是否有防护罩。如果用户对问题键入“否”,您是否有防护罩?布尔Player1Hassieldbo设置为false。如果用户键入yes,则在If语句中输入setPlayerShieldTrue();方法被调用 布景播放机现场图(布尔值哈斯菲尔德);方法:此方法接受布尔值。在该布尔值中,局部变量HasField设置为true,然后分配给player1HasShieldBo returnIfHasShield();方法:此方法仅返回布尔player1Hassieldbo 类charstart point,该类调用所有方法 我发现了CharObe的变量被初始化并且可以在这个类中很好地访问的原因,这是因为这个类调用choose();方法 接口CharInterface,尚未使用
public interface CharInterface {
int hurt(int curHealth, int hurting);
int damage(int hitDamage);
int shield(int shieldHealth, int shielLevel);
}
*另一个问题是,当我在类CharObe中创建一个对象时,它会直接给我一个java.lang.StackOverflowerError,为什么*
我不知道我为什么会有这些问题。我可能只是有一些非常简单的事情把我的程序搞砸了,我不知道。
我尝试过的事情-从类CharWosna直接访问布尔播放器1hassieldbo
-创建另一个布尔值,使其具有player1hassieldbo的值(当player1hassieldbo等于true时)
-从类CharObe初始化player1hassieldbo(结果并非如所愿,它始终等于true) 如果您想在此处查看我的所有代码,请参阅。 仪表盘
public interface CharInterface {
int hurt(int curHealth, int hurting);
int damage(int hitDamage);
int shield(int shieldHealth, int shielLevel);
}
import java.util.Scanner;
public class CharObe implements CharInterface {
int player1Level;
int player1Damage;
int player1Health;
String player1HasShield;
boolean player1HasShieldBo = false;
int player1ShieldLevel;
int player1ShieldHealth;
boolean valid = false;
Scanner keyBoard = new Scanner(System.in);
CharObe f = new CharObe();
//Letting the user pick the players level and whether it has a shield or
not.
public void choose(){
System.out.println("what is Your player level? (number from 1-20)");
do{
//asking user for the level of their player
System.out.print("Enter level here > ");
if(keyBoard.hasNextInt()){
player1Level = keyBoard.nextInt();
if(player1Level >= 1 && player1Level <= 20){
valid = false;
}else{
System.out.println("Enter a number between 1 and 20!");
valid = true;
}
}else{
System.out.println("Only numbers are valid");
keyBoard.next();
valid = true;
}
}while(valid);
do{
//asking the user if they have a shield or not
System.out.println("\ndo you have a shield? (if yes only type" +
"'yes' if no type 'no')");
System.out.print("Shield? yes or no? > ");
if(keyBoard.hasNext()){
player1HasShield = keyBoard.next();
if(player1HasShield.equalsIgnoreCase("yes")){
System.out.println("You have a SHIELD!!!");
setPlayerShieldTrue(player1HasShieldBo);
System.out.println("What is your shield Level? (Only" +
"numbers 1-5)");
do{
System.out.print("Shield level > ");
if(keyBoard.hasNextInt()){
player1ShieldLevel = keyBoard.nextInt();
if(player1ShieldLevel >= 1 && player1ShieldLevel <= 5){
valid = false;
}else{
System.out.println("PLEASE only numbers from 1-5");
valid = true;
}
}else{
System.out.println("Only numbers are valid");
keyBoard.next();
valid = true;
}
}while(valid);
}else{
System.out.println("You did not type 'yes'"
+ " now you dont have a shield...");
player1ShieldLevel = 0;
valid = false;
}
}
}while(valid);
switch(player1Level){
case 1: player1Health = 100; player1Damage = 10; break;
case 2: player1Health = 105; player1Damage = 11; break;
case 3: player1Health = 110; player1Damage = 12; break;
case 4: player1Health = 80; player1Damage = 20; break;
case 5: player1Health = 100; player1Damage = 15; break;
case 6: player1Health = 150; player1Damage = 5; break;
case 7: player1Health = 115; player1Damage = 17; break;
case 8: player1Health = 130; player1Damage = 20; break;
case 9: player1Health = 135; player1Damage = 15; break;
case 10: player1Health = 140; player1Damage = 23; break;
case 11: player1Health = 160; player1Damage = 17; break;
case 12: player1Health = 150; player1Damage = 28; break;
case 13: player1Health = 180; player1Damage = 15; break;
case 14: player1Health = 155; player1Damage = 30; break;
case 15: player1Health = 115; player1Damage = 40; break;
case 16: player1Health = 200; player1Damage = 20; break;
case 17: player1Health = 250; player1Damage = 35; break;
case 18: player1Health = 1000; player1Damage = 67; break;
case 19: player1Health = 550; player1Damage = 130; break;
case 20: player1Health = 9999; player1Damage = 479; break;
}
if(player1HasShieldBo){
switch(player1ShieldLevel){
case 1: player1ShieldHealth = 5; break;
case 2: player1ShieldHealth = 7; break;
case 3: player1ShieldHealth = 15; break;
case 4: player1ShieldHealth = 20; break;
case 5: player1ShieldHealth = 30; break;
}
}else{
player1ShieldHealth = 0;
}
if(player1HasShieldBo){
System.out.println(
"\nPlayer1's level: " + player1Level +
"\nPlayer1's Health: " + player1Health +
"\nplayer1's damage: " + player1Damage +
"\nPlayer1's shield level: "+ player1ShieldLevel +
"\nplayer1's shield HP: " + player1ShieldHealth);
}else{
System.out.println(
"\nPlayer1's level: " + player1Level +
"\nPlayer1's Health: " + player1Health +
"\nPlayer1's shield level: "+ player1ShieldLevel +
"\nplayer1's damage: " + player1Damage);
}
System.out.println("\nSetting player2's variables...");
}
public void setPlayerShieldTrue(boolean HasSield){
HasSield = true;
player1HasShieldBo = HasSield;
}
public boolean returnIfHasShield(){
return player1HasShieldBo;
}
@Override
public int hurt(int curHealth, int hurting) {
return curHealth;
}
@Override
public int damage(int hitDamage) {
return hitDamage;
}
@Override
public int shield(int shieldHealth, int shielLevel) {
return 0;
}
}
类计费起始点
public class CharStartingPoint {
public static void main(String[] args) {
System.out.println("Welcome! Fellow traveler.");
System.out.println("please input proper information in order to"
+ " procceed to fight.\n");
CharObe player1 = new CharObe();
CharWosna player2 = new CharWosna();
player1.choose();
player2.settingNPC();
player2.bbs();
System.out.println(player1.player1HasShieldBo);
System.out.println(player1.player1HasShield);
}
}
夏洛贝级
public interface CharInterface {
int hurt(int curHealth, int hurting);
int damage(int hitDamage);
int shield(int shieldHealth, int shielLevel);
}
import java.util.Scanner;
public class CharObe implements CharInterface {
int player1Level;
int player1Damage;
int player1Health;
String player1HasShield;
boolean player1HasShieldBo = false;
int player1ShieldLevel;
int player1ShieldHealth;
boolean valid = false;
Scanner keyBoard = new Scanner(System.in);
CharObe f = new CharObe();
//Letting the user pick the players level and whether it has a shield or
not.
public void choose(){
System.out.println("what is Your player level? (number from 1-20)");
do{
//asking user for the level of their player
System.out.print("Enter level here > ");
if(keyBoard.hasNextInt()){
player1Level = keyBoard.nextInt();
if(player1Level >= 1 && player1Level <= 20){
valid = false;
}else{
System.out.println("Enter a number between 1 and 20!");
valid = true;
}
}else{
System.out.println("Only numbers are valid");
keyBoard.next();
valid = true;
}
}while(valid);
do{
//asking the user if they have a shield or not
System.out.println("\ndo you have a shield? (if yes only type" +
"'yes' if no type 'no')");
System.out.print("Shield? yes or no? > ");
if(keyBoard.hasNext()){
player1HasShield = keyBoard.next();
if(player1HasShield.equalsIgnoreCase("yes")){
System.out.println("You have a SHIELD!!!");
setPlayerShieldTrue(player1HasShieldBo);
System.out.println("What is your shield Level? (Only" +
"numbers 1-5)");
do{
System.out.print("Shield level > ");
if(keyBoard.hasNextInt()){
player1ShieldLevel = keyBoard.nextInt();
if(player1ShieldLevel >= 1 && player1ShieldLevel <= 5){
valid = false;
}else{
System.out.println("PLEASE only numbers from 1-5");
valid = true;
}
}else{
System.out.println("Only numbers are valid");
keyBoard.next();
valid = true;
}
}while(valid);
}else{
System.out.println("You did not type 'yes'"
+ " now you dont have a shield...");
player1ShieldLevel = 0;
valid = false;
}
}
}while(valid);
switch(player1Level){
case 1: player1Health = 100; player1Damage = 10; break;
case 2: player1Health = 105; player1Damage = 11; break;
case 3: player1Health = 110; player1Damage = 12; break;
case 4: player1Health = 80; player1Damage = 20; break;
case 5: player1Health = 100; player1Damage = 15; break;
case 6: player1Health = 150; player1Damage = 5; break;
case 7: player1Health = 115; player1Damage = 17; break;
case 8: player1Health = 130; player1Damage = 20; break;
case 9: player1Health = 135; player1Damage = 15; break;
case 10: player1Health = 140; player1Damage = 23; break;
case 11: player1Health = 160; player1Damage = 17; break;
case 12: player1Health = 150; player1Damage = 28; break;
case 13: player1Health = 180; player1Damage = 15; break;
case 14: player1Health = 155; player1Damage = 30; break;
case 15: player1Health = 115; player1Damage = 40; break;
case 16: player1Health = 200; player1Damage = 20; break;
case 17: player1Health = 250; player1Damage = 35; break;
case 18: player1Health = 1000; player1Damage = 67; break;
case 19: player1Health = 550; player1Damage = 130; break;
case 20: player1Health = 9999; player1Damage = 479; break;
}
if(player1HasShieldBo){
switch(player1ShieldLevel){
case 1: player1ShieldHealth = 5; break;
case 2: player1ShieldHealth = 7; break;
case 3: player1ShieldHealth = 15; break;
case 4: player1ShieldHealth = 20; break;
case 5: player1ShieldHealth = 30; break;
}
}else{
player1ShieldHealth = 0;
}
if(player1HasShieldBo){
System.out.println(
"\nPlayer1's level: " + player1Level +
"\nPlayer1's Health: " + player1Health +
"\nplayer1's damage: " + player1Damage +
"\nPlayer1's shield level: "+ player1ShieldLevel +
"\nplayer1's shield HP: " + player1ShieldHealth);
}else{
System.out.println(
"\nPlayer1's level: " + player1Level +
"\nPlayer1's Health: " + player1Health +
"\nPlayer1's shield level: "+ player1ShieldLevel +
"\nplayer1's damage: " + player1Damage);
}
System.out.println("\nSetting player2's variables...");
}
public void setPlayerShieldTrue(boolean HasSield){
HasSield = true;
player1HasShieldBo = HasSield;
}
public boolean returnIfHasShield(){
return player1HasShieldBo;
}
@Override
public int hurt(int curHealth, int hurting) {
return curHealth;
}
@Override
public int damage(int hitDamage) {
return hitDamage;
}
@Override
public int shield(int shieldHealth, int shielLevel) {
return 0;
}
}
import java.util.Scanner;
公共类CharObe实现了CharInterface{
int播放器1级;
int player1损坏;
int Player1健康;
弦乐演奏者1哈斯希尔德;
布尔player1hassieldbo=false;
int PLAYER1屏蔽层;
int player1ShieldHealth;
布尔有效=假;
扫描仪键盘=新扫描仪(System.in);
CharObe f=新CharObe();
//让用户选择玩家的等级,以及是否有盾牌
不
公共空间选择(){
System.out.println(“你的玩家级别是多少?(1-20之间的数字)”;
做{
//询问用户其玩家的级别
System.out.print(“在此输入级别>”;
if(keyBoard.hasNextInt()){
player1Level=keyBoard.nextInt();
如果(player1Level>=1&&player1Level=1&&player1ShieldLevel首先,您的代码将用于设置布尔值。但是您有一些错误
stackOverflow是由于您在与属性相同的类中创建了CharObe对象而导致的。因此,要创建CharObe对象,需要创建CharObe等等
罪魁祸首:在夏洛贝班上
CharObe f = new CharObe();//remove this
第二件事,你不能仅仅为了读取属性而在CharWosna中创建一个CharObe对象
该代码也是罪魁祸首:
//CharObe object created for acquiring CharObe's variables in that class
CharObe toGet = new CharObe();
在构造函数中创建player2时,尝试传递player1对象
就像在CharWonsa这样:
//CharObe object created for acquiring CharObe's variables in that class
CharObe toGet;
public CharWosna(CharObe obe) {
toGet=obe;
}
最后,在CharStartingPoint类中,创建如下对象:
CharObe player1 = new CharObe();
CharWosna player2 = new CharWosna(player1);
另一个更好的方法是单独维护一个GameContext类,并拥有所有必要的数据,比如玩家,以及从那里访问
不客气。下次请准确回答您的问题。您发布的代码似乎比您的问题合理的代码要多。请阅读并
//CharObe object created for acquiring CharObe's variables in that class
CharObe toGet;
public CharWosna(CharObe obe) {
toGet=obe;
}
CharObe player1 = new CharObe();
CharWosna player2 = new CharWosna(player1);