Problème execution programme Java

[Résolu/Fermé]
Signaler
-
 John -
Bonjour,

J'ai lu quelques sujet à ce propos sans trouver une solution.
Je débute, voire même je n'ai aucune connaissance de Java, mais je comprends vite.
Voilà, j'ai trouvé un code pour un programme dont j'ai besoin pour un dossier, cependant je n'arrive pas à l'exécuter.
Je pense qu'il manque un petit détail mais quoi...?


Voici le code:

import java.lang.Math;  
import java.io.*; 
public class Frisbee {    
private static double x;    
private static double y;    
private static double vx;    
private static double vy;    
private static final double g = -9.81;    
private static final double m = 0.175;    
private static final double RHO = 1.23;    
private static final double AREA = 0.0568;    
private static final double CL0 = 0.1;    
private static final double CLA = 1.4;    
private static final double CD0 = 0.08;    
private static final double CDA = 2.72;    
private static final double ALPHA0 = -4;    
public static void simulate(double y0, double vx0, double vy0,    
double alpha, double deltaT)    
{    
double cl = CL0 + CLA*alpha*Math.PI/180;  
double cd = CD0 + CDA*Math.pow((alpha-ALPHA0)*Math.PI/180,2);    
x = 0;    
y = y0;    
vx = vx0;    
vy = vy0;    
try {    
PrintWriter pw = new PrintWriter(new BufferedWriter     
(new FileWriter("frisbee.csv")));    
int k = 0;    
while(y>0){    
double deltavy = (RHO*Math.pow(vx,2)*AREA*cl/2/m+g)*deltaT;    
double deltavx = -RHO*Math.pow(vx,2)*AREA*cd*deltaT;    
vx = vx + deltavx;    
vy = vy + deltavy;    
x = x + vx*deltaT;    
y = y + vy*deltaT;    
if(k%10 == 0) {    
pw.print(x + "," + y + "," + vx);    
pw.println();    
pw.flush();    
}    
k++;    
}    
pw.close();    
}    
catch(Exception e){    
System.out.println("Error, file frisbee.csv is in use.");}    
}    
}    


Et voici le rapport du "Terminal":


Exception in thread "main" java.lang.NoSuchMethodError: main



Si quelqu'un pouvait m'aider, ce serait bénéfique pour mon travail.

Merci d'avance.

1 réponse

Messages postés
16404
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2021
2 897
Tu as oublier les import au début du code :

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.PrintWriter;

Et il y a une erreur dans la boucle while, car "cl" n'existe pas, c'est "cd"

double deltavy = (RHO*Math.pow(vx,2)*AREA*cd/2/m+g)*deltaT;
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 41713 internautes nous ont dit merci ce mois-ci

Messages postés
16404
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2021
2 897
Remarque : je viens de regarder un peu le code, et j'y apporterais bien quelques modifications...

import java.io.BufferedWriter; 
import java.io.FileWriter; 
import java.io.PrintWriter; 

public class Frisbee  
{      
    private static final double G = -9.81;  
    private static final double M = 0.175;  
    private static final double RHO = 1.23;  
    private static final double AREA = 0.0568;  
    private static final double CL0 = 0.1;  
    private static final double CLA = 1.4;  
    private static final double CD0 = 0.08;  
    private static final double CDA = 2.72;  
    private static final double ALPHA0 = -4; 
     
    public static void simulate(double y0, double vx0, double vy0, double alpha, double deltaT)  
    {  
        double cl = CL0 + CLA*alpha*Math.PI/180;
        double cd = CD0 + CDA*Math.pow((alpha-ALPHA0)*Math.PI/180,2); 
         
        double x = 0;  
        double y = y0;  
        double vx = vx0;  
        double vy = vy0; 
         
        try  
        { 
            PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("frisbee.csv")));  
            pw.printf("x;y;vx;vy%n"); 
         
            double deltavx, deltavy; 
             
            for (int k=0; y>=0; k++) 
            {  
                deltavx = -RHO*Math.pow(vx,2)*AREA*cd*deltaT;  
                deltavy = (RHO*Math.pow(vx,2)*AREA*cl/2/M+G)*deltaT;  
         
                vx = vx + deltavx;  
                vy = vy + deltavy; 
                 
                x = x + vx*deltaT;  
                y = y + vy*deltaT; 
                 
                if (k%10 == 0) 
                    pw.printf("%f;%f;%f;%f%n",x,y,vx,vy); 
            } 
             
            pw.close();  
        }  
        catch(Exception e) 
        {  
            e.printStackTrace(); 
        }  
    }  

    public static void main(String...args) 
    { 
        simulate(1,14,0,10,0.001); 
    } 
} 
Justement, je ne vois pas où elles sont définies en ordre...

Avec toutes les modifications apportées, j'obtiens ce résultat (je ne l'ai pas essayé encore):

import java.lang.Math; 
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.PrintWriter;
public class Frisbee {
private static double x;
private static double y;
private static double vx;
private static double vy;
private static final double g = -9.81;
private static final double m = 0.175;
private static final double RHO = 1.23;
private static final double AREA = 0.0568;
private static final double CL0 = 0.1;
private static final double CLA = 1.4;
private static final double CD0 = 0.08;
private static final double CDA = 2.72;
private static final double ALPHA0 = -4;
public static void main(String...args)
{
simulate(double 1, double 14, double 0, double 10, double 0.001);
}
{
double cl = CL0 + CLA*alpha*Math.PI/180;
double cd = CD0 + CDA*Math.pow((alpha-ALPHA0)*Math.PI/180,2);
x = 0;
y = y0;
vx = vx0;
vy = vy0;
try {
PrintWriter pw = new PrintWriter(new BufferedWriter 
(new FileWriter("frisbee.csv")));
int k = 0;
while(y>0){
double deltavy = (RHO*Math.pow(vx,2)*AREA*cl/2/m+g)*deltaT;
double deltavx = -RHO*Math.pow(vx,2)*AREA*cd*deltaT;
vx = vx + deltavx;
vy = vy + deltavy;
x = x + vx*deltaT;
y = y + vy*deltaT;
if(k%10 == 0) {
pw.print(x + "," + y + "," + vx);
pw.println();
pw.flush();
}
k++;
}
pw.close();
}
catch(Exception e){
System.out.println("Error, file frisbee.csv is in use.");}
}
}
Messages postés
16404
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2021
2 897
C'est parce que tu as modifié le code, il ne fallait pas enlever cette ligne :

public static void simulate(double y0, double vx0, double vy0, double alpha, double deltaT)

Regarde mon code juste au dessus, il ne devrait pas y avoir de problème avec...
D'accord, je comprends mieux maintenant.

Je copie/colle sans rien rajouter à ton code alors, bien que je ne comprends pas certaines lignes, mais tu en connais bien plus que moi là dessus ^^

Merci de ton aide, vraiment et de ta patience.
Ca marche ! Enfin !

Merci pour le temps que tu m'as consacré :)