Изменение одного из 3 значений объекта в LinkedList

#java #object #linked-list

#java #объект #связанный список

Вопрос:

Предполагается, что я создаю коллекцию «часов» и изменяю ее минутное значение на 1. Я создал класс Clock (взяв 3 int в качестве параметров) и поместил их в LinkedList. Но когда я пытаюсь получить значения объекта, это приводит к ошибке… Вот моя идея (да, я знаю, что мне нужно добавить код, который изменит час, если минута станет больше 60):

 public static void main (String[] args) throws java.lang.Exception{
Random randomizer = new Random();

List <Clock> Clocks = new LinkedList <Clock>();
for (int i=0; i <randomizer.nextInt(9) 1; i  ){
    Clock clock = new Clock(randomizer.nextInt(24) , randomizer.nextInt(60), randomizer.nextInt(60));
    Clocks.add(clock);
    }
    
    for (Clock clock : Clocks) {
        clock.checkTime();//this method from Clock class just prints on the console randomized time separated with ":".
        clock.set(clock.getHour(), clock.getMinute() 1, clock.getSecond()); 
 }
}
  

Есть ли какой-либо способ изменить только одно из этих 3 значений int?

Я также рассмотрел возможность создания другого класса «time», который затем будет преобразован в String и Clock, используя эту строку вместо 3 целых чисел. Но мне все равно понадобится код для извлечения целых чисел из строки и их изменения… Поэтому я решил не идти этим путем.

Ответ №1:

Я протестировал это (код внизу), и он работает без каких-либо ошибок. Единственным изменением, которое мне пришлось внести в ваш код, было удаление из Clock clock = new Clock(randomizer.nextInt(24) , randomizer.nextInt(60), randomizer.nextInt(60));

Не могли бы вы предоставить дополнительную информацию об ошибке получения значений объектов?

Что касается изменения только одного из чисел на часах, вы можете добавить один или несколько методов в Clock класс для увеличения значений. (например, get / set для каждого из 3 целых чисел)

 ...

public void setH(int h) {
    this.h = h;
}
public void setM(int m) {
    this.m = m;
}
public void setS(int s) {
    this.s = s;
}

...
  

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

 ...

public void increment(int h, int m, int s) {
    this.h  = h;
    this.m  = m;
    this.s  = s;
}
public void incrementH(){
    this.h  ;
}
public void incrementM(){
    this.m  ;
}
public void incrementS(){
    this.s  ;
}

public void tick() {
    /* this.s  ;
    if (this.s >= 60) {
        this.s = 0;
        this.m  ;
    } */

    // just the minutes
    this.m  ;

    if (this.m >= 60) {
        this.m = 0;
        this.h  ;
    }
}

...
  

Моя реализация вашего кода

 import java.util.Random;
import java.util.List;
import java.util.LinkedList;

public class HelloWorld {
    public static void main (String[] args) throws java.lang.Exception{
        Random randomizer = new Random();
        
        List <Clock> Clocks = new LinkedList <Clock>();
        for (int i=0; i <randomizer.nextInt(9) 1; i  ){
            Clock clock = new Clock(randomizer.nextInt(24), randomizer.nextInt(60), randomizer.nextInt(60));
            Clocks.add(clock);
        }
        
        for (Clock clock : Clocks) {
            clock.checkTime();//this method from Clock class just prints on the console randomized time separated with ":".
            clock.set(clock.getHour(), clock.getMinute() 1, clock.getSecond()); 
        }
    }
}


class Clock {
    private int h, m, s;
    
    public Clock(int h, int m, int s) {
        set(h, m, s);
    }
    
    public void checkTime() {
        System.out.println(h   " "   m   " "   s);   
    }
    public void set(int h, int m, int s) {
        this.h = h;
        this.m = m;
        this.s = s;
    }
    
    public int getHour() {
        return h;
    }
    public int getMinute() {
        return m;
    }
    public int getSecond() {
        return s;
    }
    
    
}
  

Комментарии:

1. Спасибо. Это сработало — я использовал методическую галочку (слегка измененную, так как она должна быть> 59 вместо> 60), и она отлично сработала. Полный код теперь находится по этой ссылке (раньше у него не было метода tick, но это было единственное отличие): kodilla.com/pl/project-java/175400 #