所以我正在做点什么。为了简短起见,我有两节课。一个类是执行所有程序的地方,另一个类是我正在编写将要使用的代码。我的类中有一个x和ay整数,执行所有程序,我需要执行的方法将x或y升高或降低1.我有一个switch语句,其中有四个选择,根据他们做出的选择,将决定x或y的值是上升还是下降。
import java.util.Scanner;
public class Walking {
public void NorthSouthEastWest(){
int x = 0;
int y = 0;
boolean direction = false;
Scanner input = new Scanner(System.in);
do{String userDirection = input.nextLine();
switch(userDirection){
case "North":
direction = true;
y++;
break;
case "South":
direction = true;
y--;
break;
case "East":
direction = true;
x++;
break;
case "West":
direction = true;
x--;
break;
default:
}
}while(direction == false);
但是当我运行程序时,我在输入switch语句的命令之前和之后打印出x和y,并且x和y不会改变。我不确定为什么。任何解决方案?
答案 0 :(得分:3)
基元和原始包装器在Java中是不可变的,因此一个好的解决方案是将它们包装到一个可变的对象中。
以下是使用Location
类保存x
和y
坐标的示例。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Location location = new Location();
Walking walking = new Walking();
walking.northSouthEastWest(location);
System.out.println(location.x);
System.out.println(location.y);
}
}
class Location {
int x;
int y;
}
class Walking {
public void northSouthEastWest(Location location) {
boolean direction = false;
Scanner input = new Scanner(System.in);
do {
String userDirection = input.nextLine();
switch (userDirection) {
case "North":
direction = true;
location.y++;
break;
case "South":
direction = true;
location.y--;
break;
case "East":
direction = true;
location.x++;
break;
case "West":
direction = true;
location.x--;
break;
}
} while (!direction);
}
}
如果您不想使用类似自定义Location
的对象,您还可以使用包含两个元素的int[]
数组。
答案 1 :(得分:2)
当你想要修改它们的值时,你确定要传递它们(x& y)吗? Java没有通过引用传递方法参数,所以你可能想要照顾它。
答案 2 :(得分:0)
x和y变量在NorthSouthEastWest()方法中声明(按照惯例,Java中的方法以小写字母开头)。它们具有局部范围,仅在声明它们的方法中可见。
如果要从其他方法访问x和y变量,请将它们声明为实例或类变量。以下链接可帮助您了解问题:The Java Tutorials - Variables
例如:
public class Walking {
// These could also be declared as static variables
private int x;
private int y;
public int getX() {
return x;
}
public int getY() {
return y;
}
// Rest of your code...
}
答案 3 :(得分:-2)
您可以使用此类架构:
public class YourClass {
public int x;
public int y;
public void NorthSouthEastWest(){
// your logic, don't do int x = 0; int y = 0;
}
public static void main(String[] args) {
YourClass yourClass = new YourClass();
yourClass.printXY();
yourClass.NorthSouthEastWest();
yourClass.printXY();
}
public void printXY() {
System.out.println("x=" + x + ", y=" + y);
}
}