2016-11-28 43 views
2

Я пытаюсь напечатать координаты переведенной точки. Если точка переведена вне диапазона 10, -10 на оси x и y, тогда исходная точка должна быть возвращена, а не переведенной. Итак, для p1 (5,4), если я должен был перевести его на (7,8), он должен вернуться (5,4). Мне сложно понять, как именно сказать Java, чтобы напечатать исходную точку в этом случае. Нужно ли включать какой-то логический тип? Вот что я до сих пор. (Код написан на немецком языке, но «verschiebe» означает перевод.) Любая помощь будет принята с благодарностью! Спасибо y'all заранее :)Как распечатать исходные координаты точки, если я переведу точку за пределами определенного квадрата?

public class Punkt2 { 
private int x; 
private int y; 

public void setX (int i) { 
    x = i; 
} 
public void setY (int i) { 
    y = i; 
} 
public void verschiebe(int deltaX, int deltaY){ 
    x = x + deltaX; 
    y = y + deltaY; 
} 

public int getX(){ 
    return x; 
} 

public int getY(){ 
    return y; 
} 


public static void main (String[] args){ 
    Punkt p1 = new Punkt(); 
    p1.setX(5); p1.setY(4); 
    Punkt p2 = new Punkt(); 
    p2.setX(2);p2.setY(1); 

    p1.verschiebe(7,8); 
    if (p1.getX() > 10 || p1.getY() > 10 || p1.getX() < -10 || p1.getY() < -10){ 
     System.out.println(new Punkt()); 
    } 
    else { 
     System.out.println(p1.getX() + "," + p1.getY()); 
    } 
    p2.verschiebe(3, 2); 
    if (p2.getX() > 10 || p2.getY() > 10 || p2.getX() < -10 || p2.getY() < -10){ 
     System.out.println(new Punkt()); 
    } 
    else { 
     System.out.println(p2.getX() + "," + p2.getY()); 
    } 
} 
} 

ответ

0

Обычный способ сделать это - проверить границы внутри метода translate().

Например:

private boolean outOfBounds(point, bounds) { 
    return (abs(point) > bounds); 
} 

public void translate(int deltaX, int deltaY) { 
    int newX = x + deltaX; 
    int newY = y + deltaY; 

    if(outOfBounds(newX, 10) || outOfBounds(newY, 10)) { 
     return; 
    } 

    x = newX; 
    y = newY; 
} 
+0

Спасибо! Теперь я получаю много сообщений об ошибках, заявляя, что newX/newY не может быть разрешен для переменных. И аналогичным образом, для «точки» я получаю «bool не может быть разрешен для типа». Неужели я просто тупой или вы, ребята, знаете, почему это происходит? –

+0

Я попытался инициализировать newX и newY как ints, но затем outOfBounds не работает (снова) –

+0

Это в основном я немного быстро и свободно с Java. Вы хотите объявить 'newX' и' newY' '' int' и возвращать логическое значение. Извините, я много не делаю. – UrhoKarila

0

Если вы имеете в виду, что вы не хотите, х точки в или у значения, чтобы быть более 10 или ниже -10, вы можете просто не изменять значения в методе verschiebe ,

Как это:

public void verschiebe(int deltaX, int deltaY){ 
    if(x + deltaX <= 10 && x + deltaX >= -10){ 
     x = x + deltaX; 
    } 
    if(y + deltaY <= 10 && y + deltaY >= -10){ 
     y = y + deltaY; 
    } 
} 

Тогда точка по х и у значения останутся прежними, если они собираются, чтобы получить больше, чем 10 или меньше, чем -10. Итак, теперь в основном классе вы можете просто напечатать точку, которую хотите, и ваш метод verschiebe позаботится о том, чтобы ваши x и y всегда находились между -10 и 10.

+0

спасибо !! Я даже не рассматривал это как вариант, я был так повешен на моем буле. Это довольно чистое решение! –

+0

Ничего, я понял, как! Теперь я понял, что мне нужно добавить отдельный файл в том же пакете с именем класса «Main». (Noob) –

0

Имейте объект Punkt, который будет отвечать за перевод очков на возвращая «переведенную» точку. Он может возвращать себя, когда перевод приводит к точке, которая выходит за пределы.

class Punkt { 

    private int x; 
    private int y; 

    public Punkt(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

    public Punkt verschiebe(int dX, int dY) { 
     int newX = x+dX; 
     int newY = y+dY; 

     if (abs(newX) > 10 || abs(newY) > 10) { 
      return this; 
     } 

     return new Punkt(newX, newY); 
    } 

    public void print() { 
     System.out.println(x + "," + y); 
    } 

} 

бы также сообщить, что у вас есть сам Панк печать, так что ваши клиенты могут выглядеть так:

public static void main (String[] args){ 
    Punkt p1 = new Punkt(5, 4); 
    Punkt p2 = new Punkt(2, 1); 

    p1.verschiebe(7,8).print(); 
    p2.verschiebe(3,2).print(); 
} 

еще лучше, если клиент на самом деле нужно печатать переведенные точки выше код может быть дополнительно улучшена до:

public static void main (String[] args){ 
    Punkt p1 = new Punkt(5, 4); 
    Punkt p2 = new Punkt(2, 1); 

    p1.printTranslated(7,8); 
    p2.printTranslated(3,2); 
} 

Непросто, чтобы Punkt соответствовал потребностям клиента.

+0

Спасибо за подсказку. Знаете ли вы, есть ли способ, которым я мог бы создать автономный основной класс, тогда это облегчит нагрузку класса Punkt на вычисление и печать? –

+0

Point является самостоятельным классом и отвечает за деловые вопросы (перевод, печать и т. Д.). – Weltschmerz