java - 使用用户输入更改变量

标签 java variables

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

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

另一个类应该:

  • 采取一些行动
  • 传入变量
  • 至少使用一个 if 语句
  • 拥有私有(private)方法
  • 有一些 getter 和 setter。

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

我不知道如何增加/减少耐力。每当我尝试某些操作时,都会收到错误。

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

代码如下:

Controller 类:

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(); 
                     }
}

最佳答案

要在Java中使用变量,必须先声明它。 例如,您想使用整数,则必须声明它

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

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

stamina cannot be resolved to a variable.

如果你想减少该玩家的体力,你应该获取当前的体力,减少它并将其恢复原状 例如:

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

接下来我将继续介绍您的代码。 对象的属性不应声明为公共(public)(您的字段“名称”、“强度”、“耐力”)。它们应该是私有(private)的,您可以通过 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(); 

关于java - 使用用户输入更改变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32194063/

相关文章:

PHP PDO 使用 IF 更新变量字段

variables - R中 "variable (number of points included)"移动平均值的高效计算

c - 为什么编译器将变量理解为指针,而事实并非如此?

java - Soap 服务在本地工作,但在另一台服务器上引发 ClassCastException

java - 在单独的线程中运行一个进程,以便 Java FX 应用程序的其余部分可用?

java - 我可以在这里使用什么描述性变量名称?

无法识别 Java 正则表达式空白

javascript - 基本的文字格斗游戏javascript

java - Micronaut 中 HttpServletRequest 和 HttpServletResponse 的替代方案

c++ - 我在 DLL 项目 C++ 中收到 "nonstatic member reference must be relative to specific object"错误