【问题标题】:Changing variables using user input使用用户输入更改变量
【发布时间】:2015-08-25 01:11:56
【问题描述】:

我必须为课程编写代码。这些是要求:

一个类应该是带有main方法的Controller。

其他类应该:

  • 做一些动作
  • 传入变量
  • 至少使用一个 if 语句
  • 有私有方法
  • 有一些 getter 和 setter。

我已经完成了大部分工作。我遇到了一个问题,我希望用户输入“前进”,然后将体力降低 5,并在 Sonsole 中显示一条消息,“你失去 5 体力”。而且我还希望用户能够输入“休息”并将耐力增加 5(上限为 100,并且让控制台说,“耐力增加到 #。”

我不知道如何增加/减少耐力。每当我尝试某事时,都会出错。

如果我有一些我不需要的东西,请告诉我它是什么以及为什么我应该删除它。如果有什么是公开的并且不需要公开,请告诉我为什么不应该公开。我的老师说,以后每次公开不需要公开的东西都会被扣 5 分。

代码如下:

控制器类:

import java.io.*;
import java.util.Scanner;

public class Controller {
  public static void main(String[] args){

    System.out.println("Type your name here:");
    Scanner scan = new Scanner(System.in);
    String input = scan.nextLine();         
    Player playerOne = new Player(input);
          playerOne.setStrength(78);
          playerOne.setHealth(99);
          playerOne.setStamina(67);
          playerOne.printplayer();

          System.out.println("Type 'Go Forward' to move forward");
          Scanner mscan = new Scanner(System.in);
          //mscan = movement scan   
          String minput = scan.nextLine();
                if(minput.equals("Go Forward"))
                    //minput = movement input
                    System.out.println("You lose 5 stamina.");
                    //Getting an error here : 'stamina cannot be resolved to a variable'
                    System.out.println("Stamina: " + stamina);
                if(minput.equals("Rest"))   
                //Getting an error here : 'stamina cannot be resolved to a variable'
                    System.out.prinln("Stamina has been increased to " + stamina);
                     scan.close(); 
                     }
}

还有播放器类:

import java.util.Scanner;

public class Player{

        public String name; 
        private String input;
        private double health;


        public double strength;

        public double stamina;

        //Player Name
         public Player (String input){
          name = input;
       }

       //Player Health
         public void setHealth(double playHp){
             health = playHp;
       }
       //Player Strength
       public void setStrength(double playStrn){
          strength = playStrn;
       }
       //Player Stamina
       public void setStamina(double playStam){
          stamina = playStam;
       }

       public void printplayer(){
          System.out.println("name  : " + name );
          System.out.println("Health :" + health);
          System.out.println("Strength :" + strength);
          System.out.println("Stamina :" + stamina);

            }

       private void reduceStamina() {
           int stamina;

         }
    public int getStamina() {

        return 0;
    }
}

          System.out.println("Type 'Go Forward' to move forward");
          Scanner mscan = new Scanner(System.in);
          //mscan = movement scan   
          String minput = scan.nextLine();
                if(minput.equals("Go Forward"))
                    //minput = movement input
                    System.out.println("You lose 5 stamina.");
                    //Getting an error here : 'stamina cannot be resolved to a variable'
                    System.out.println("Stamina: " + stamina);
                if(minput.equals("Rest"))   
                //Getting an error here : 'stamina cannot be resolved to a variable'
                    System.out.prinln("Stamina has been increased to " + stamina);
                     scan.close(); 
                     }
}

【问题讨论】:

  • "I don't know how to increase/decrease the stamina though. Whenever I try something, I get an error." -- 请显示您尝试过的内容以及由此导致的完整错误消息。否则,我们将不知道您可能做错了什么,或者您可能做出了哪些不正确的假设。
  • staminaPlayer 的一个字段,你应该在你的Player 类中提供一个getStamina 方法,并在你想显示它时使用playerOne.getStamina()
  • @MadProgrammer 你是对的,但他将耐力设置为公开,所以这看起来不像是整体问题。这是错误的,但不会像他那样产生错误。
  • @lacraig2 "//这里出现错误:'stamina cannot be resolved to a variable'",OP根本没有引用Player实例,他们'刚刚在称为staminamain 方法中使用了一个未定义的变量...并且不要让我开始使用public 字段
  • @MadProgrammer 我也不喜欢它,但他的问题是他没有调用 playerOne.stamina (或 getStamina() 如果他正确设置了方法,而不是他没有正确保护他的数据。

标签: java variables


【解决方案1】:

要在 Java 中使用变量,您必须先声明它。 示例你想使用一个整数,你必须声明它

int mynumber = 1; //declare variable named mynumber and give it value is 1

你错过了如何声明一个变量,我在你的代码中看到了 2 个错误 1. 可复用:之前已经声明了一个Scanner,可以再次使用,不必再声明一个名为mscan的Scanner 2.声明变量:前面说过,要使用变量,必须先声明。在您的整个代码中,您没有声明 stamina 变量,因此您不能使用它。这就是你出错的原因

stamina 无法解析为变量。

如果你想减少那个玩家的耐力,你应该得到当前的耐力,减少它并重新设置 例如:

double currentStamina = player.getStamina();
currentStamina = currentStamina - 5; // (or currentStamina-=5) decrease current stamina by 5
player.setStamina(currentStamina); // set current stamina for player

接下来我将继续介绍您的代码。 不应将对象的属性声明为公共(您的字段“名称”、“强度”、“耐力”)。它们应该是私有的,您可以通过 get/set 方法获取/设置它们的值。 您使用 stamina 作为变量,但它没有被引用(我说您之前没有声明它)。你是说职业球员的耐力场吗? 所以如果你想使用另一个对象的字段,你必须像这样使用: 而不是

System.out.println("Current stamina is " + stamina);

改成

System.out.println("Current stamina is " + player.stamina);

但不要这样打电话,你应该打电话:

System.out.println("Current stamina is " + player.getStamina()); // don't directly access field of an object, please call get/set instead

下一步:IF 和 ELSE IF 您可以在代码中为 if 语句获取打开和关闭括号。如果您的语句后没有打开和关闭括号,它将仅执行下一行作为前一个条件的操作。 你应该学会使用else关键字。

在所有事情之后,你的代码应该是:

String minput = scan.nextLine();
double currentStamina = player.getStamina();
if(minput.equals("Go Forward"))
{
     currentStamina -= 5;
     System.out.println("You lose 5 stamina.");
     System.out.println("Stamina: " + currentStamina);
}
else if(minput.equals("Rest"))   
{
     currentStamina += 5;
     System.out.prinln("Stamina has been increased to " + currentStamina );
}
player.setStamina(currentStamina); // update stamina value to player
scan.close(); 

【讨论】:

    【解决方案2】:

    声明一个名为 getStamina,increaseStamina 和 reductionStamina 的公共方法:

    public int getStamina(){
       return stamina;
    }
    
    public void increaseStamina(int st){
       stamina+=st;
    }
    
    public void decreaseStamina(int st){
       stamina-=st;
    }
    

    然后在您的程序中执行以下操作:

    Player player=new Player();
    if(minput.equals("Go Forward"))
        System.out.println("You lose 5 stamina.")
        player.decreaseStamina(5);
        System.out.println("Stamina: " + player.getStamina());
    

    【讨论】:

    • 他是编码新手,你的回答让他成为复制粘贴机器人。
    • 我的老师教机器人,我有一些机器人朋友。好伤心。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多