Le problème est dans ta classe Main
.
public class Main {
public double t = 2;
public static void main(String[] args) {
Cube a=new Cube(5);
Cube b=new Cube(3);
VolumeCalculator.addForm(a);
VolumeCalculator.addForm(b);
t=VolumeCalculator.getTotalVolume();
System.out.println(t);
}
}
Ici, ligne 10, tu utilises la variable t
que tu as définie comme un attribut d’instance (non statique, donc) depuis une méthode statique (la méthode main
). Les attributs d’instance sont attachés à une instance (comme tes instances de Cube
) et ne sont pas accessibles ici car le code n’est pas exécuté depuis une instance de la classe Main
. D’ailleurs, vu que tu sembles être sous IntelliJ sauf erreur, il est probable que ce dernier te souligne la ligne où tu tentes d’utiliser t
en te précisant cela.
Si c’est un peu obscur, je te conseille de re-voir la différence entre champs statiques et non-statiques en Java.
Ici, la solution pour corriger cela, ce serait ou de changer l’attribut t
afin qu’il soit statique, et donc accessible depuis la méthode main
:
…ou, mieux vu que tu ne t’en ressers pas, supprimer l’attribut et se contenter d’une variable dans la méthode main
(sauf s’il est prévu que ça change bien entendu) :
public static void main(String[] args) {
final double t = VolumeCalculator.getTotalVolume();
System.out.println(t);
}
Et si le code est définitif (que tu ne prévoies pas d’utiliser autrement la valeur récoltée) tu peux même te passer complètement d’une variable :
public static void main(String[] args) {
System.out.println(VolumeCalculator.getTotalVolume());
}
Remarque indépendante sur l’ensemble du code et sa logique
Sur une note indépendante, je pense que tu gagnerais, en terme de logique de code, à stocker les volumes de ton calculateur dans une instance et non au niveau de la classe, ce qui permettrait aussi d’en utiliser plusieurs simultanément, et de ne pas partager un état sur tout le programme alors que ce n’est pas forcément utile ou souhaitable (sauf si c’est réellement volontaire, alors je ne dis rien). Quelque chose comme ça, pour l’utilisation (ce qui ne change pas grand chose au code de la classe VolumeCalculator
d’ailleurs, mais qui est je trouve plus logique) :
final VolumeCalculator calculator = new VolumeCalculator();
calculator.addForm(a);
calculator.addForm(b);
final double t = calculator.getTotalVolume();
@Angelo : le retour d’une méthode statique peut sans aucun problème être stocké dans une variable non-statique, le problème ne venait pas de là Strictement parlant, le type de retour de getTotalVolume
c’est juste double
, public static
n’étant que des précisions sur la méthode elle-même et non ce qu’elle renvoie.
La solution que tu proposes fonctionne, mais pas pour la raison que tu indiques .