[java] Erreur pour l'utilisation d'une classe - Un problème sûrement bête

Bonjour,

J’ai décidé de me mettre au Java, tiens, là, comme ça, histoire d’élargir ma culture en programmation (qui ne s’élève pas très haut, hein). Cela m’a l’air relativement simple pour les bases, sauf que là, je bloque :

Mon programme de débutant (test.java) :

public class test {
	public static void main (String args[]) {
  System.out.print("Compter jusqu'à  : ");
  int n;
  n = lire.i();
  for(int i=0; i<=n; i++) {
  	System.out.print(i + "\t");
  }
	}
}

La sortie de la commande "javac test.java" :

----------
1. ERROR in test.java
 (at line 5)
        n = lire.i();
            ^^^^
lire cannot be resolved
----------

“lire” est une classe permettant d’utiliser facilement les entrées clavier.
“lire.class” est bien dans le dossier où se trouve “test.java”.
Je suis sous linux (FC5), si cette information peut aider.

Si quelqu’un avait une suggestion… je le remercie d’avance…

boarf

Et ta classe lire a bien une méthode définie ainsi :

public static int i() {
   //code
}

Pour ton erreur, il faut que :

  • . (le répertoire courant) soit dans ton classpath
  • Quel est le package de lire?

N.B.: Il existe des règles de codage spécifiques à Java (developpez.com a une version simple et en français)

Oui, le problème n’est pas là, étant donné que cette classe fonctionne chez un ami.

  • Je ne suis pas sûr… à priori, il suffit d’avoir lire.class dans le même dossier que test.java, non ? Sinon, comment faire pour que mon répertoire apparaisse dans le ‘classpath’ ?
  • lire ne fait partie d’aucun package. Il s’agit simplement d’une classe permettant d’utiliser les entrées clavier. Je peux la mettre en ligne si ça peut aider.

boarf

Lire -> si la métode est static

sinon


//main, toussa

//Constructeur
Lire myFirstClass = new Lire();

//Utilisation
int cpt = myFirstClass.i();

//Traitement
for(int i = 0; i < cpt; i++)
{
   //faire qqch
}
//fin main, toussa

Ce serait une histoire de majuscule ? Bon, je vais voir et je vous informe du résultat…

jmgchouchou> change ta signature pour ne pas géner la navigation des autres, merci.

La majuscule ne change rien, même en ayant renommé lire.java en Lire.java et recompilé ce dernier, sans qu’il n’y ait d’erreurs. J’avoue que je désespère.

t’as tenté :

java -classpath ./ Lire

?

Euh, non. Comme je l’ai dit, je débute, et je ne sais pas ce que fait cette commande. M’enfin, je vais essayer…

Java cherche les classes java soit dans les chemins proposés dans la variable d’environnement CLASS_PATH, soit dans ceux que tu fournis.

Je pense que si tu fais export CLASS_PATH=./ ça devrait aussi fonctionner.

Si tu as la classe source, tu peux essayer en la mettant dans le meme dossier que la classe qui contient le ‘main’.
Faire attention au déclaration de ‘package’ a la tete du fichier (xp inside :sarcastic: )

SN -> modifié :jap:

Heu… Tu changes lire.java en Lire.java et le compilateur ne te dis rien?

Peux-tu mettre en ligne ce que tu tapes pour compiler?

La commande

java -classpath ./ Lire

ne fait rien, si ce n’est m’enjoindre à consulter l’aide de giv. Je vais essayer la commande export CLASS_PATH=./ .
J’ai mis la classe lire en ligne ICI.

La commande est :

javac Lire.java

, tout bêtement. Bien évidemment, je remplace "lire" par "Lire" dans "public class lire".

lire.java , lire.class, Lire.java, Lire.class sont dans le même dossier que test.java.
Je ne déclare aucun package, je devrais ? Et je rappelle que je suis sous FC5, pas xp.

xp pour expérience :wink:

Ca a vraiment l’air d’un problème de classpath…

Tu es vraiment sûr que ça ne change rien avec

javac -classpath . test.java

?

Ben ce n’est pas le même code que celui que Sans-Nom m’avait indiqué, je vais donc essayer. Vous aurez la réponse ce soir, car pour le moment je n’ai pas accès à l’ordinateur où je travaille…

non, vire le ".java"

Tu lui fournis la classe que tu veux appeler.

Pas de main() dans la classe que tu fournis.

Sinon arrête tout de suite les frais :slight_smile: la classe Scanner fait déjà tout ce que tu essaye de faire, en mieux.

Heu…

  • javac aime bien avoir le nom complet du fichier
  • pas de main() dans la classe test? Ben si (cf. 1er post)

Un main dans la classe ‘test’ mais pas dans la classe ‘Lire’

Un truc de programmeur : mettre une majuscule au nom des classes (et donc au fichier) pour les différencier ds variables.

myself> oups :slight_smile: pas vu le ‘c’ de javac

sinon, dans l’exemple (lire.java), pas de main… et comme je lui dis de faire avec lire…