2017-02-21 5 views
1

Also arbeite ich an etwas. Um es kurz und einfach zu halten, habe ich zwei Klassen. In einer Klasse wird das gesamte Programm ausgeführt und in der anderen Klasse Code, der verwendet wird. Ich habe eine x und ay Ganzzahl in meiner Klasse, wo das ganze Programm ausgeführt wird, und ich brauche die Methode, die ausgeführt wird, um x oder y um 1 zu erhöhen oder zu senken. Ich habe eine switch-Anweisung, wo die Person vier Möglichkeiten hat und je nachdem, welche Wahl sie treffen, entscheiden sie, ob das x oder das y im Wert steigt oder fällt.mit einer ganzen Zahl in mehreren Methoden

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

aber wenn ich das Programm ausführen, drucke ich vor dem x- und y und nachdem ich in dem Befehl für die Switch-Anweisung geben, und die x- und y einfach nicht ändern. Ich bin mir nicht sicher warum. Irgendwelche Lösungen?

+0

Zu allererst Ihre Syntax ist falsch, während (Richtung == false); scheint irrelevant – Akshay

+0

Ich verstehe, dass Sie x und y in beiden Klassen haben? Also änderst du das eine x in einer Klasse und druckst das andere x in der anderen Klasse? – IQV

+0

@Akshay Es ist nicht falsch. Es wäre besser, es als 'while (! Direction);' zu schreiben, aber es ist korrekt wie es ist. –

Antwort

-2

Sie können solche Schema verwenden:

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

Aber dann kommt er x und y nicht zurück in seine andere Klasse. – IQV

+2

Wird nichts ändern. Primitive Wrapper sind unveränderlich, genauso wie Primitive. –

+0

Ich versuchte es und wurde hoffnungsvoll, aber leider erhöhte es nicht das x und y, das ich wollte. Ich bin mir nicht sicher, was es ausgelöst hat, aber es war nicht das x und y in der Klasse, die ich brauche. Aber danke für den Versuch c: –

2

sind Sie sicher, dass Sie vorbei ihnen (x & y), wenn Sie ihre Werte ändern möchten? Java übergibt Methodenargumente nicht als Referenz, daher sollten Sie sich darum kümmern.

3

Primitive und primitive Wrapper sind in Java unveränderlich, daher wäre es eine gute Lösung, sie in ein veränderbares Objekt zu verpacken.

Unten finden Sie ein Beispiel mit einer Location Klasse, die Ihre Koordinaten x und y enthält.

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

Wenn Sie keine benutzerdefinierte Location -ähnlichen Objekt verwenden möchten, können Sie auch eine int[] Array mit zwei Elementen verwenden.

0

Die x- und y-Variablen werden in der NorthSouthEastWest() -Methode deklariert (per Konvention beginnen Methoden in Java mit einem Kleinbuchstaben). Sie haben einen lokalen Gültigkeitsbereich und sind nur in der Methode sichtbar, in der sie deklariert wurden.

Wenn Sie von einer anderen Methode auf die x- und y-Variablen zugreifen möchten, deklarieren Sie sie als Instanz- oder Klassenvariablen. Der Link sollte Ihnen helfen, zu verstehen, die Frage: The Java Tutorials - Variables

Zum Beispiel:

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... 
} 
Verwandte Themen