Обычно я не хожу на подобные сайты, но у меня возник серьезный вопрос, и я не могу понять, как это исправить.
Итак, у меня есть простой кубик, который бросается при нажатии кнопки. Он печатает все числа игральных костей в консоли. Теперь я хочу сохранить последний int, чтобы с ним можно было делать вычисления и т. д. Теперь проблема в том, что я серьезно не знаю, как получить последний int кубика и распечатать его в консоли. Есть ли у кого-нибудь в этом опыт и может ли мне помочь? Вот мой код:
btn.setText("Roll Die");
btn.setOnAction((ActionEvent event) -> {
btn.setDisable(true);//Disable Button
Random random = new Random();
int gekozen = Integer.parseInt(tf3.getText());
Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(.3), (actionEvent) -> {
int tempRandom = random.nextInt(6) + 1;
System.out.println(tempRandom);
die.setDieFace(tempRandom);
}));
timeline.setCycleCount(random.nextInt(20) + 1);
timeline.play();
timeline.setOnFinished(actionEvent -> {
btn.setDisable(false);//Enable Button
});
});
@James_D Нет, потому что это просто возвращает мне изображение
Не должно. Вы передаете int в setDieFace(...), поэтому вы должны получить обратно int, если вы вызываете getDieFace(), если ваш класс Die определен правильно. Вы всегда можете добавить к нему другой метод, который при необходимости возвращает значение int.
@James_D Возвращает: ImageView @ 1a808c06 [styleClass = image-view]
Мой код: timeline.setCycleCount (random.nextInt (20) + 1); timeline.play (); timeline.setOnFinished (actionEvent -> {btn.setDisable (false); System.out.println (die.getdieFace ());}); });
Похоже, вам нужно исправить дизайн любого класса die.
Отредактируйте вопрос, не помещайте код в комментарий. Предоставьте минимальный воспроизводимый пример. В частности, предоставьте код класса Die и любой другой минимальный код, чтобы кто-нибудь мог скопировать и вставить ваш код, чтобы воспроизвести проблему.
Почему вы используете другую учетную запись? stackoverflow.com/questions/50021161/…




Лучший вариант - просто где-то хранить значения. Ваш класс Die (или любой другой класс die) кажется хорошим кандидатом для этого. В хорошо спроектированном классе, если вы передадите значение методу набора, скажем, setXyz(x), то вызов getXyz() без каких-либо операций с тем же объектом в то же время вернет то же значение x. Итак, если вы разработали свой класс в соответствии со стандартными шаблонами Java, вы можете просто сделать
timeline.setCycleCount(random.nextInt(20) + 1);
timeline.play();
timeline.setOnFinished(actionEvent -> {
btn.setDisable(false);//Enable Button
int dieValue = die.getDieFace();
System.out.println(dieValue);
});
Другой вариант - заранее вычислить все временные значения кристалла:
btn.setText("Roll Die");
btn.setOnAction((ActionEvent event) -> {
btn.setDisable(true);//Disable Button
Random random = new Random();
int gekozen = Integer.parseInt(tf3.getText());
int numTempValues = random.nextInt(20) + 1 ;
int[] tempValues = random.ints(1, 7).limit(numTempValues).toArray();
int finalDieValue = tempValues[numTempValues - 1];
Timeline timeline = new Timeline() ;
for (int i = 0 ; i < tempValues.length ; i++) {
KeyFrame keyFrame = new KeyFrame(Duration.seconds(0.3).multiply(i+1), actionEvent -> {
System.out.println(tempValues[i]);
die.setDieFace(tempValues[i]);
});
timeline.getKeyFrames().add(keyFrame);
}
timeline.setOnFinished(actionEvent -> {
btn.setDisable(false);//Enable Button
System.out.println("You rolled: "+finalDieValue);
});
timeline.play();
});
Вы можете добавить переменную int в класс Die.
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
/**
*
* @author blj0011
*/
public class Die
{
ImageView dieFace;
Image[] images;
int dieValue;
public Die(Image[] images)
{
this.images = images;
dieFace = new ImageView(this.images[0]);//set default to image 0
dieValue = 1;
}
public Die(Image[] images, int dieFaceValue)
{
//Need to catch for values less than 1 and greater than 6!
this.images = images;
dieFace = new ImageView(this.images[dieFaceValue - 1]);
dieValue = dieFaceValue;
}
public ImageView getdieFace()
{
return dieFace;
}
public int getDieValue()
{
return dieValue;
}
public void setDieFace(int dieFaceValue)
{
//Need to catch for values less than 1 and greater than 6!
dieFace.setImage(this.images[dieFaceValue - 1]);
dieValue = dieFaceValue;
}
}
Разве нельзя просто вызвать
die.getDieFace()в обработчикеonFinished?