J'ai un programme dans lequel je calcule et imprime des informations sur la consommation d'essence. L'affectation sur laquelle je travaille veut que je (enfin, je pense qu'il le veut) utiliser la POO, le constructeur et l'objet pour passer des variables d'un constructeur à tout mon programme. Cela n'a aucun sens pour moi.
Voici les instructions d'attribution exactes: https://drive.google.com/file/d/1D1FuK1sVu4VkHrU8 view? usp = sharing
J'ai essayé de rendre mes variables d'origine dans la méthode principale des variables statiques privées et je les ai placées juste en dessous de mon en-tête de classe. Cela a fonctionné, mais je pense que les instructions veulent que mon constructeur inclue des variables d'une manière ou d'une autre. Cela n'a aucun sens pour moi. Je n'ai pas du tout de constructeurs ou d'objets et comment les utiliser dans cette application, et c'est frustrant pour moi.
CarV3, le programme auquel les instructions font référence en termes de ce que je suis censé orienter objet, ressemblait à ceci:
public class CarV5 {
private static int sMiles1 = 43266;
private static int eMiles1 = 43422;
private static int dist1;
private static double gals1 = 7.8;
private static double MPG1;
private static double pricePerGallon1 = 2.98;
private static double GPM1;
private static double totalCost1;
private static String carType1 = "14 Acura MDX";
CarV5() {
}
public int calcDistance(int sMiles1, int eMiles1){
return eMiles1 - sMiles1;
}
public static double calcMPG(int dist1, double gals1){
return dist1 / gals1;
}
public static double calcGPM(int dist1, double gals1) {
return gals1 / dist1;
}
public static double totalCost(double pricePerGallon1, double gals) {
return pricePerGallon1 * gals;
}
public static void main(String[]Args) {
CarV5 car1 = new CarV5();
dist1 = car1.calcDistance(sMiles1, eMiles1);
MPG1 = car1.calcMPG(dist1, gals1);
GPM1 = car1.calcGPM(dist1, gals1);
totalCost1 = car1.totalCost(pricePerGallon1, gals1);
System.out.printf("%70s%n%s%16s%14s%13s%12s%10s%9s%14s%13s%n%s%n", "Gas Mileage Calculations", "Type of Car", "Start Miles", "End Miles", "Distance", "Gallons", "Price", "Cost", "Miles/Gal", "Gal/Mile", "================================================================================================================");
System.out.printf("%s%15d%14d%13d%12.1f%10.2f%9.2f%14.1f%13.3f", carType1, sMiles1, eMiles1, dist1, gals1, pricePerGallon1, totalCost1, MPG1, GPM1);
}
}
Ce code fonctionnait auparavant. Les instructions demandent de calculer GPM et d'autres données plus tard, donc mon programme se transforme en quelque chose de plus comme ça dans CarV5:
public class CarV3 {
public static int calcDistance(int sMiles1, int eMiles1){
return eMiles1 - sMiles1;
}
public static double calcMPG(int dist1, double gals1){
return dist1 / gals1;
}
public static void main(String[]Args) {
int sMiles1 = 43305;
int eMiles1 = 43422;
int dist1;
double gals1 = 7.8;
double MPG1;
String carType1 = "14 Acura MDX";
CarV3 car1 = new CarV3();
dist1 = car1.calcDistance(sMiles1, eMiles1);
MPG1 = car1.calcMPG(dist1, gals1);
System.out.printf("%52s%n%s%16s%14s%13s%12s%14s%n%s%n", "Gas Mileage Calculations", "Type of Car", "Start Miles", "End Miles", "Distance", "Gallons", "Miles/Gal",
"================================================================================");
System.out.printf("%s%15d%14d%13d%12.1f%14.1f", carType1, sMiles1,
eMiles1, dist1, gals1, MPG1);
}
}
Bien que ce code fonctionne, je suis presque sûr qu'il n'est pas C'est pas ce que les instructions m'ont demandé de faire. Honnêtement, je ne comprends pas ce que les instructions veulent que je fasse. Le programme que vous y voyez imprime le résultat attendu, qui correspond à toutes les données de la voiture. Cependant, dans les instructions, on me dit d'utiliser une sorte de constructeur avec des valeurs. Si vous remarquez que dans la deuxième version j'ai ce "CarV5 () {}", que je ne comprends pas à quoi il sert.
Le résultat attendu est correct dans ma deuxième version du programme, CarV5, comme mentionné précédemment. Un tableau imprime les valeurs calculées de distance, de gallons, etc.
Mon approche est ce qui ne va pas. Je suis désolé pour le très long post, mais mes amis qui suivent également ce cours pensent que j'ai dépassé le point d'être enseigné, et si je suis honnête, peut-être que je le suis aussi. Je veux vraiment savoir comment faire cela.
3 Réponses :
Ok, je ne suis pas sûr de ce qu'est l'affectation car elle n'est pas accessible mais je pense qu'ils veulent que vous créiez une classe avec des champs qui seront définis dans le constructeur lors de la création de l'objet. Laissez-moi vous montrer un bref exemple:
package tst;
public class CarTest {
public static void main(String[] args) {
// creating new instance of the Car and at once setting all its fields in constructor
// now as I see the assignment, this line corresponds to
// CarV5 car1 = new CarV5(carType1, endMiles1, startMiles1, gallonsUsed1, pricePerGallon1);
Car car = new Car(43266, 43422, 7.8);
//calculating and printing the result w/o providing values but using instance fields
System.out.println(car.calcDistance());
}
// the Car class itself, you can put it in different file
public static class Car {
// note that fields are NOT static, i.e. they belong to an INSTANCE of the class, not the class itself
private int sMiles1;
private int eMiles1;
private double gals1;
//
public Car(int sMiles1, int eMiles1, double gals1) {
this.sMiles1 = sMiles1;
this.eMiles1 = eMiles1;
this.gals1 = gals1;
}
// example of your methods
public int calcDistance(){
return this.eMiles1 - this.sMiles1;
}
// other methods you need
}
}
Dites-moi si cela vous aide :) PS: Je pense que ce qui vous trouble, ce sont les méthodes statiques vs instance , essayez de rafraîchir cette partie du cours ou utilisez une autre source (= google :))
Merci pour votre réponse. En fait, nous ne sommes pas encore censés utiliser plus d'une classe. Je ne comprends pas non plus le «ceci». puisque nous ne l'avons pas encore appris. J'ai mis à jour le lien des instructions afin qu'il devrait être accessible. Je pense que votre approche est très proche de ce que j'ai à faire. Merci!
Oui, je l'ai scindé intentionnellement en deux classes pour que vous puissiez mieux voir la classe elle-même (objet) et le code qui utilise la classe. Vous pouvez déplacer la méthode main vers la classe Car, cela fonctionnera de la même manière. Concernant this - vous pouvez menacer en tant que pointeur vers l'instance de classe, comme ici this.sMiles1 = sMiles1; nous définissons paramètre constructeur sMiles1 au champ d'instance déclaré dans private int sMiles1; .
Tout d'abord Pourquoi tout est-il statique? Deuxièmement, comme votre lien ne fonctionne pas, je ne peux pas vraiment voir ce que l'on demande de faire, donc je ne peux que supposer, en fonction de ce que vous dites, que vous voulez créer un objet avec un constructeur, c'est qu'il ?
public class CarV5 {
private int sMiles1;
private int eMiles1;
public CarV5(int sMiles1Constructor,int eMiles1Constructor){
this.sMiles1 = sMiles1Constructor;
this.eMiles1 = eMiles1Constructor;
}
your methods...
}
public static void main(String[]Args) {
CarV5 car1 = new CarV5(43266,42422);
//Call your methods here...
}
en gros, il vous suffit de passer vos variables comme arguments dans votre constructeur.
N'abandonnez pas l'homme, une fois que vous avez appris ces bases, cela devient plus facile avec le temps, ne t'inquiète pas.
Je pense que c'est une bonne suggestion. Mon ami essayait de suggérer que je mette des nombres dans la déclaration de l'objet. Je pense que je comprends ce que vous faites, mais je ne sais pas ce que «ceci». Est-ce que. Nous n'avons pas encore appris cela dans le cours. Cependant, en regardant votre code, je l'interprète car j'ai besoin de fournir des valeurs aux entiers réels via le constructeur? Je ne comprends pas non plus le sMiles1Constructor. Est-ce juste un espace réservé pour quelque chose que j'écrirais là-bas? Merci beaucoup d'avoir répondu. De plus, êtes-vous sûr que le lien Google Drive mis à jour ne fonctionne pas? Je l'ai fait "tout le monde peut voir". Merci encore
sMiles1Constructor est juste quelque chose que j'ai écrit pour que vous compreniez que c'est la variable passée dans le constructeur (généralement ils ont le même nom), le «ceci». fait référence à la variable créée au-dessus du constructeur, afin que vous puissiez accéder à ces valeurs plus tard en utilisant des getters et des setters (recherchez-le si vous en avez besoin), Fondamentalement, les variables que j'ai créées ci-dessus auront la valeur passée dans le constructeur (" this. "signifie" cette classe "). Oui, le lien Google Drive fonctionne déjà.
Les objets sont des types de données comme les autres (par exemple int, double, String, ect.) Cela signifie que vous pouvez créer plusieurs de ces objets avec différents noms et attributs associés. Les variables de champ
(le plus souvent sous la forme de
private int nom_champ; )
ne sont que des parties de la valeur de cet objet. Vous devez le voir littéralement: vous associez directement un attribut de mile par gallon à toute voiture que vous lisez, donc cela fonctionne de la même manière. Les variables statiques sont un moyen simple de faire en sorte qu'une valeur étende cette petite portée d'une classe en laissant des objets qui ne font pas partie des variables d'accès à la classe (uniquement de cette certaine classe bien sûr) que vous ne voulez pas être spécifiques à la voiture (par exemple une variable d'année, qui est la même pour tous les objets (sans rapport, mais un exemple plausible)). J'espère que cela clarifie les choses!
Votre lien vers le devoir est inaccessible: "Désolé! Vous devez vous connecter pour voir ce contenu."
Désolé, je vais résoudre ce problème, je sais pourquoi cela ne fonctionnera pas. Voici un lien fonctionnel: drive.google.com/file/d/ 1D1FZKHrU4duu1UyWusPvsjVum33B8kdt /…