Есть ли способ создать диапазон в Java? - PullRequest
0 голосов
/ 25 сентября 2019

Я создаю виртуальную кошку.Пользователь должен иметь возможность назвать его и иметь три категории для взаимодействия с пользователем: здоровье, еда, счастье.Диапазон (самый низкий) 1-50 (самый высокий) Значение int равно 30. В идеале пользователь должен иметь возможность повышать или понижать категории при взаимодействии.

Как создать этот диапазон и объявить 50 как максимальное и1 как самое низкое значение?

Я объявил три категории.

String catName;
int food = 30;
int health = 30;
int happiness = 30;

System.out.println(" type cat name");

catName = input.nextLine();

Ответы [ 4 ]

0 голосов
/ 25 сентября 2019

Я понимаю, если вы только начинаете на Java.Правильный способ сделать вашу программу с ООП.То есть .. создание объекта Virtual Cat:

public class VirtualCat {
    private String catName;
    private int food;
    private int health;
    private int happiness;

    public VirtualCat(String catName){
        this.catName = catName;
        this.food = 30;
        this.health = 30;
        this.happiness = 30;
    }

    public String increaseFood(){
        if(this.food+1 > 50)
            return "Error. Food range is [1-50].";
        else{
            this.food++;
            return "Food increased.";
        }
    }

    public String increaseHealth(){
        if(this.health+1 > 50)
            return "Error. Health range is [1-50].";
        else{
            this.health++;
            return "Health increased.";
        }
    }

    public String increaseHappiness(){
        if(this.happiness+1 > 50)
            return "Error. Happiness range is [1-50].";
        else{
            this.happiness++;
            return "Happiness increased.";
        }
    }

    public String decreaseFood(){
        if(this.food-1 < 0)
            return "Error. Food range is [1-50].";
        else{
            this.food--;
            return "Food decreased.";
        }
    }

    public String decreaseHealth(){
        if(this.health-1 < 0)
            return "Error. Health range is [1-50].";
        else{
            this.health--;
            return "Health decreased.";
        }
    }

    public String decreaseHappiness(){
        if(this.happiness-1 < 0)
            return "Error. Happiness range is [1-50].";
        else{
            this.happiness--;
            return "Happiness decreased.";
        }
    }

    @Override
    public String toString() {
        return "VirtualCat{" + "catName=" + catName + ", food=" + food + ", health=" + health + ", happiness=" + happiness + '}';
    }
}

Итак, ваша основная программа должна выглядеть так:

public static void main(String[] args) {
        int answer = 1;
        int increaseOrDecrease = 0;
        VirtualCat virtualCat = new VirtualCat(JOptionPane.showInputDialog(null, "Please insert cat name"));

        while(answer == 1){
            System.out.println("Actual status for virtual cat: "+virtualCat.toString());
            increaseOrDecrease = Integer.parseInt(JOptionPane.showInputDialog(null, "Do you want to increase food? Type 1 for increase, type 2 for decrease"));
            if(increaseOrDecrease == 1)
                System.out.println(virtualCat.increaseFood());
            else if(increaseOrDecrease == 2)
                System.out.println(virtualCat.decreaseFood());
            else
                System.out.println("Incorrect option. It need to be 1 or 2");

            increaseOrDecrease = Integer.parseInt(JOptionPane.showInputDialog(null, "Do you want to increase health? Type 1 for increase, type 2 for decrease"));
            if(increaseOrDecrease == 1)
                System.out.println(virtualCat.increaseHealth());
            else if(increaseOrDecrease == 2)
                System.out.println(virtualCat.decreaseHealth());
            else
                System.out.println("Incorrect option. It need to be 1 or 2");

            increaseOrDecrease = Integer.parseInt(JOptionPane.showInputDialog(null, "Do you want to increase happiness? Type 1 for increase, type 2 for decrease"));
            if(increaseOrDecrease == 1)
                System.out.println(virtualCat.increaseHappiness());
            else if(increaseOrDecrease == 2)
                System.out.println(virtualCat.decreaseHappiness());
            else
                System.out.println("Incorrect option. It need to be 1 or 2");

            answer = Integer.parseInt(JOptionPane.showInputDialog(null, "Do you want continue? Type 1 for yes, type 2 for no"));
        }
        System.out.print("Final status for virtual cat: "+virtualCat.toString());
    }
0 голосов
/ 25 сентября 2019

Для тех, кто имеет доступ к библиотекам Java Guava, рассмотрите:

https://guava.dev/releases/19.0/api/docs/com/google/common/collect/Range.html

0 голосов
/ 25 сентября 2019

Как уже писали другие, Java - это объектно-ориентированный язык программирования, и вы должны этим воспользоваться.

Хороший способ гарантировать, что значение остается в пределах определенного диапазона, - реализовать тип, в котором можно установить верхний предел, нижний предел и изменяемое значение.Базовая реализация может выглядеть следующим образом:

public class RangedValue {
    private final int lowerLimit;
    private final int upperLimit;
    private int value;

    public RangedValue(int lowerLimit, int upperLimit, int value) {
        if (lowerLimit >= upperLimit) {
            throw new IllegalArgumentException("The lowerLimit must be less " +
                    "than the upperLimit!");
        }
        this.lowerLimit = lowerLimit;
        this.upperLimit = upperLimit;
        this.value = RangedValue.ensureRange(value, upperLimit, lowerLimit);
    }

    /**
     * Helper method to ensure that a value stays within the defined range.
     *
     * @param value      The value to be kept in the defined range
     * @param upperLimit The upper limit of the range
     * @param lowerLimit The lower limit of the range
     * @return The value or the lowerLimit or the upperLimit
     */
    private static int ensureRange(int value, int upperLimit, int lowerLimit) {
        if (value > upperLimit) {
            return upperLimit;
        } else if (value < lowerLimit) {
            return lowerLimit;
        }

        return value;
    }

    public int increaseValueBy(int value) {
        int increased = this.value + value;
        this.value = RangedValue.ensureRange(increased, upperLimit, lowerLimit);
        return this.value;
    }

    public int reduceValueBy(int value) {
        return increaseValueBy(-value);
    }

    public int setValue(int value) {
        return RangedValue.ensureRange(value, upperLimit, lowerLimit);
    }

    public int getLowerLimit() {
        return lowerLimit;
    }

    public int getUpperLimit() {
        return upperLimit;
    }

    public int getValue() {
        return value;
    }
}

Тогда вы можете использовать этот класс для своего существующего кода:

RangedValue food = new RangedValue(0, 50, 30);
RangedValue health = new RangedValue(0, 50, 30);
RangedValue happiness = new RangedValue(0, 50, 30);

System.out.println(" type cat name");

catName = input.nextLine();

Вы также можете определить cat в отдельном классе, изКонечно, но это зависит от вас.

0 голосов
/ 25 сентября 2019

Да, как сказано в комментарии @MC Emperor, Java - это ОО-язык, поэтому вы должны использовать его как таковой.Например, вы можете создать следующий класс (просто отправную точку, чтобы получить кикстарт):

public class VirtualCat{

    private int food;

    //... other properties, constructors etc

    // here validate the modification of the property
    public void increaseFood(){
        if(food + 1 > 50){
            throw new Exception("Invalid value for food");
        } else {
            food ++;
        }
    }

    public void decreaseFood(){
        if(food - 1 < 1){
            throw new Exception("Invalid value for food");
        } else {
            food --;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...