написать метод stati c для установки счетчика java? - PullRequest
1 голос
/ 12 марта 2020

Я довольно новичок в кодировании, я хочу написать метод stati c, чтобы установить значение счетчика в 1000.

Я пытался делать такие вещи, как

public static  int setCounter(){
        return 1000;

    }

При попытке использовать этот метод в другом для увеличения счетчика

, например someVariable = symboli c constant + setCounter () ++; возвращаем someVariable, он дает мне неожиданную ошибку типа, обязательная переменная, найденное значение. Что я делаю не так?

edit *

edit *

private String getTicketNumber(){
    ticketNumber = TICKET_PREFIX + resetCounter()++;
    return ticketNumber;

 public static int resetCounter(int counter){
        counter = 1000;

    }

Я хочу вызвать этот счетчик, чтобы увеличить его в другом методе

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Свойство stati c связано с определением класса, и существует только одно определение класса. Экземпляр создается всякий раз, когда вы используете ключевое слово new в классе. Все экземпляры хранят свои личные данные из класса stati c. При использовании экземпляра класса вы можете получить доступ к переменным stati c, но не наоборот.

Вы используете термин константа, но я думаю, что у вас может быть некоторое недопонимание того, что это означает. Константы часто объявляются как static final значения, которые являются неизменными (они никогда не могут быть изменены). Вы не должны иметь возможность изменять константу. Значение stati c может быть изменяемым, если вы этого хотите, и это то, что мы иногда называем синглтоном с состоянием.

Рассмотрим эти два примера ... один изменяет переменную экземпляра, другой - переменную stati c.

class InstanceFoo {
    int i = 1000;
    int resetCounter() {
        i = 1000;
        return i;
    }
    int getAndIncrement() {
        return i++;
    }
}

class StaticFoo {
    static int i = 1000;
    static int resetCounter() {
        i = 1000;
        return i;
    }
    static int getAndIncrement() {
        return i++;
    }
}

В первом примере вам нужно использовать экземпляр для доступа к переменные .. т.е. вам нужно создать его экземпляр с помощью new:

InstanceFoo foo = new InstanceFoo();
System.out.println(foo.resetCounter()); // 1000
System.out.println(foo.getAndIncrement()); // 1000
System.out.println(foo.getAndIncrement()); // 1001
System.out.println(foo.getAndIncrement()); // 1002
System.out.println(foo.resetCounter()); // 1000

Во втором вы получите доступ к значению stati c. На статику можно ссылаться с помощью определения класса:

System.out.println(StaticFoo.resetCounter()); // 1000
System.out.println(StaticFoo.getAndIncrement()); // 1000
System.out.println(StaticFoo.getAndIncrement()); // 1001
System.out.println(StaticFoo.getAndIncrement()); // 1002
System.out.println(StaticFoo.resetCounter()); // 1000

В вашем примере вы пытаетесь увеличить счетчик, выполнив resetCounter()++. Это не будет работать по отдельной причине полностью из-за stati c или экземпляра. Примитивные значения в Java (такие как целые, двойные числа, числа с плавающей запятой и т. Д. c) передаются по значению, а не по ссылке.

В очень простом смысле c это означает, что после возврата Примитив из метода, подобного resetCounter, вы фактически передаете копию значения. Затем вы увеличиваете копию, но значение, связанное с классом, остается тем же (поскольку вы увеличиваете только копию переменной). Вам нужно вызывать постфиксный оператор ++ для самой переменной, а не для значения, возвращаемого методом. т.е. если у меня есть

class StaticFoo {
    static int i = 1000;
    static int get() {
        return i;
    }
}

System.out.println(StaticFoo.get()++); // prints 1000 and adds 1. the copy is then destroyed
System.out.println(StaticFoo.get()++); // prints 1000 and adds 1, the copy is then destroyed
System.out.println(StaticFoo.i); // prints 1000
System.out.println(StaticFoo.i++); // prints 1000 and now a postfix is applied to the static variable
System.out.println(StaticFoo.i++); // prints 1001 and another postfix is applied to the static variable
System.out.println(StaticFoo.get()); // prints 1002 because two postifx operators were applied to StaticFoo.i.

Надеюсь, это поможет вам начать.

0 голосов
/ 12 марта 2020

Я думаю, что вы присваиваете значение несовместимому типу данных. См. Мой код для справки:

      public class Main
         {
         public static void main(String[] args) {
         System.out.println("Hello World");
         int a = 10 + setCounter();
         System.out.println(a);
         }


        public static  int setCounter(){
        return 1000;
       }
       }

edit *

private String getTicketNumber(){
    ticketNumber = TICKET_PREFIX + resetCounter()++;
    return ticketNumber;

 public static void resetCounter(int counter){
        counter = 1000;

    }

Я хочу вызвать этот счетчик, чтобы увеличить его в другом методе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...