|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
[JAVA] Problema che proprio non capisco!! AIUTATEMI o SPACCO TUTTO :P
Allora ragazzi,
datemi una mano perchè sono davvero agli sgoccioli!! Dico subito che il classpath è fissato così: .;C:\; Ho costruito una classe Razionale (per creare oggetti come dei razionali.. es: 3/4, e permetterne tutte le operazioni) Questa classe sta nel percorso: C:\esamepoo\razionali\Razionale.java questo è il codice: Codice:
package esamepoo.razionali;
import esamepoo.matematica.*;
public class Razionale{
private int numeratore, denominatore;
private static int contatore=0;
public Razionale (int num, int den){
if(den==0){
System.out.println("Denominatore nullo!!");
System.exit(-1);
}
int n=Math.abs(num);
int d=Math.abs(den);
int cd=Matematica.mcd(n,d);
numeratore=num/cd;
denominatore=den/cd;
if(denominatore<0){
numeratore*=-1;
denominatore*=-1;
}
contatore++;
}
public Razionale (Razionale r){
numeratore=r.numeratore;
denominatore=r.denominatore;
contatore++;
}
public static int getCont(){
return contatore;
}
public String toString(){
if(denominatore!=1)
return numeratore+"/"+denominatore;
else
return numeratore+"";
}
public Razionale add( Razionale r ){
int mcm=r.denominatore*denominatore;
int num=(mcm/denominatore)*numeratore +
(mcm/r.denominatore)*r.numeratore;
int den=mcm;
return new Razionale( num, den );
}//add
public Razionale sub( Razionale r ){
int mcm=r.denominatore*denominatore;
int num=(mcm/denominatore)*numeratore -
(mcm/r.denominatore)*r.numeratore;
int den=mcm;
return new Razionale( num, den );
}//sub
public Razionale mul( Razionale r ){
return new Razionale( numeratore*r.numeratore,
denominatore*r.denominatore );
}//mul
public Razionale mul( int s ){
return new Razionale( numeratore*s, denominatore );
}//mul
public Razionale div( Razionale r ){
return new Razionale( numeratore*r.denominatore,
denominatore*r.numeratore );
}//div
public static Razionale estraiRazionale(String st){
int i=st.indexOf('/');
int num=Integer.parseInt(st.substring(0,i));
int den=Integer.parseInt(st.substring(i+1));
return new Razionale(num, den);
}
}
import esamepoo.matematica.*; importa una classe dove ho costruito il metodo mcd (cioè massimo comun divisore) di cui mi servo per ridurre ai minimi termini il razionale! Comunque il problema non sembra essere minimamente in questa classe, perchè la compilazione va a buon fine. I problemi arrivano quando ho deciso di costruirmi una programmino, che prende una stringa in input (presupponendo che sia un'espressione di razionali) e ne da il risultato... es: 1/3+1/4-7/5 il file l'ho messo nella stessa cartella di Razionale.java (cioè C:\esamepoo\razionali\Exp.java) e questo è il codice: Codice:
import java.util.*;
import poo.inout.*;
import esamepoo.razionali.*;
public class Exp{
public static void main(String args[]){
String exp=Console.readString("Dammi espressione Razionale: ");
StringTokenizer expt=new StringTokenizer(exp, "+-*:", true);
int cnt=0;
Razionale ris=Razionale.estraiRazionale(expt.nextToken());
while(expt.hasMoreTokens()){
char op=expt.nextToken().charAt(0);
Razionale r=Razionale.estraiRazionale(expt.nextToken());
switch(op){
case'+':ris=ris.add(r);
break;
case'-':ris=ris.sub(r);
break;
case'*':ris=ris.mul(r);
break;
case':':ris=ris.div(r);
}
}
System.out.println("Risultato: "+ris);
}
}
premetto che è corretto, infatti inout si trova in C:\poo\ a me sembra TUTTO corretto!!!!! e invece quando vado a compilare questo Exp.java ottengo questo errore: C:\esamepoo\razionali\Exp.java:10: cannot access Razionale bad class file: .\Razionale.class class file contains wrong class: esamepoo.razionali.Razionale Please remove or make sure it appears in the correct subdirectory of the classpath. Razionale ris=Razionale.estraiRazionale(expt.nextToken()); ^ 1 error Procedura completata con codice di uscita 1 Che io sto uscendo un po' pazzo!!! e se il problema risulterà banale.. scusatemi.. Grazie a tutti!!!
__________________
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 752
|
1. Controlla che il file autoexec.bat contenga la seguente linea:
set CLASSPATH=c:\; 2. Prova a compilare il file utilizzando il comando: javac -classpath c:\ ClassName.java Hope it works! Ultima modifica di atidem : 05-01-2005 alle 22:11. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
forse è banale...
ma prima di compilare exp.java hai compilato Razionale.java, VERO?????
__________________
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
Re: [JAVA] Problema che proprio non capisco!! AIUTATEMI o SPACCO TUTTO :P
Quote:
Codice:
package esamepoo.razionali;
import java.util.*;
import poo.inout.*;
// import esamepoo.razionali.*; NON SERVE
public class Exp{
....
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Quote:
__________________
|
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Re: Re: [JAVA] Problema che proprio non capisco!! AIUTATEMI o SPACCO TUTTO :P
Quote:
__________________
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
FUNZIONA!!!
![]() Quindi ne deduco, che l'import se il file si trova nella stessa cartella non serve.. anche se si tratta di un main (come nel mio caso) se messo nella stessa cartella devo "impakegiarlo" con le classi che costituiscono gli oggetti e i metodi di cui mi servo.. giusto? Comunque GRAZIE a TUTTI! sopratutto a theClimber ah!! cmq FUNZIONA BENE anche il progettino che ho costruito!!! YEAH!!
__________________
Ultima modifica di luxorl : 06-01-2005 alle 10:04. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2004
Messaggi: 752
|
Che senso ha inserire la classe contenente il main() all'interno del package?
Secondo me è un errore di forma. |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2000
Messaggi: 235
|
x atidem,
puo' non piacere... si puo' evitare la dichiarazione di package e inserirla quindi nel package di default, ma va tenuto presente che le classi nel package di default non possono essere referenziate da quelle in altri packages (cosa non grave se questa classe contiene solo il metodo main). La classe originale (senza la dichiarazione di package) di luxorl dovrebbe funzionare in questo modo, basta spostarla nella directory c:\ x luxorl, Cmq. l'import non serve quando le classi si trovano nello stesso package, non e' la directory il punto distinitivo. E' possibile, in prog. piu' complessi avere piu' strutture di directory parallele, ed e' ad esempio molto utile in progetti dove genero del codice Java in automatico, in modo da separare il codice originale (scritto a mano) da quello prodotto in automatico. Ciao
__________________
...writing about climbing is boring. I would rather go climbing. (Chuck Pratt) |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
|
Quote:
__________________
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:58.




















