我必须为类编写代码。这些是要求:
一个类应该是具有 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/