Problème execution programme Java

Résolu/Fermé
John - Modifié par John le 15/06/2011 à 19:13
 John - 15 juin 2011 à 21:19
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.

A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
15 juin 2011 à 19:09
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
Pour le cl je l'avais oublié, et j'ai rajouté la ligne correspondante.
Les "import" je les avais également oubliés.

Merci de ta réponse.

Par contre, ma question a changé à vrai dire. J'ai réussi à passer du .java au .class, mais j'ai un nouveau souci: le programme ne s'exécute pas et le Terminal m'affiche:
Exception in thread "main" java.lang.NoSuchMethodError: main


Je vais essayer les import que tu m'as indiqué

EDIT: J'ai essayé avec les import que tu m'as indiqué et j'obtiens toujours le même message...
Voici ce que j'ai au début:
import java.lang.Math; 
import java.io.*;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.PrintWriter;


PS: Les 2 premiers import je ne sais pas à quoi ils correspondent en fait.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 15/06/2011 à 19:37
import java.lang.Math est inutile, car c'est inclus implicitement.
import java.io.* inclus toutes les librairies de java.io, du coup tu n'a plus besoin des trois derniers imports mais ça peux parfois poser problème si tu utilises une classe qui est nommée de la même manière plusieurs fois dans java.io. Le mieux est d'enlever tout ce qui est en import * et de spécifier à chaque fois ce qui manque...

Concernant l'erreur de main, c'est tout simplement que tu n'en as pas !!!

Rajoute ce code, en modifiant les 0 par les paramètres que tu veux...

public static void main(String...args)
{
	 simulate(0, 0, 0, 0, 0);
}

Tu peux aussi faire comme ceci, tu passeras alors les paramètres en ligne de commandes
java Frisbee 0 0 0 0 0

public static void main(String...args)
{
	simulate(
			Double.parseDouble(args[0]),
			Double.parseDouble(args[1]),
			Double.parseDouble(args[2]),
			Double.parseDouble(args[3]),
			Double.parseDouble(args[4])
	);
}
0
Tout d'abord, merci de tes explications et de ta patience.

J'ai bien rajouté le code que tu m'as indiqué (le 1er), seulement nouveau problème (une histoire sans fin?).

Le terminal ne veut pas transformer le .java en .class et indique:

/Users/John/Desktop/Frisbee.java:21: '.class' expected   
 simulate(double y0, double vx0, double vy0, double alpha, double deltaT);   
                        ^   
/Users/John/Desktop/Frisbee.java:21: ')' expected   
 simulate(double y0, double vx0, double vy0, double alpha, double deltaT);   
                                                                                ^   
2 errors
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 15/06/2011 à 20:04
Apparemment tu as oublié une parenthèse, ou alors tu l'as mise trop tôt, je dirais que tu as écrit :

simulate(0);
Or simulate doit prendre obligatoirement 5 arguments...

Après chez moi le fichier CSV est vide, mais c'est peut-être à cause des 0, est-ce que tu aurais des valeurs à me proposer ?
0
Voilà comment je l'ai écrit:
public static void main(String...args)
{
simulate(double y0, double vx0, double vy0, double alpha, double deltaT);
}
0