#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 #