在多个方法中使用一个整数

时间:2017-02-21 07:10:10

标签: java

所以我正在做点什么。为了简短起见,我有两节课。一个类是执行所有程序的地方,另一个类是我正在编写将要使用的代码。我的类中有一个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不会改变。我不确定为什么。任何解决方案?

4 个答案:

答案 0 :(得分:3)

基元和原始包装器在Java中是不可变的,因此一个好的解决方案是将它们包装到一个可变的对象中。

以下是使用Location类保存xy坐标的示例。

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