luxorl
05-01-2005, 19:00
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:
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);
}
}
premetto subito che la stringa di import:
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:
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);
}
}
l'import poo.inout.*;
premetto che è corretto, infatti inout si trova in C:\poo\
a me sembra TUTTO corretto!!!!! :cry: :cry: :cry:
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
:cry: :cry: :cry: VI PREGO DATEMI UNA MANO!
Che io sto uscendo un po' pazzo!!!
e se il problema risulterà banale.. scusatemi..
Grazie a tutti!!!
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:
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);
}
}
premetto subito che la stringa di import:
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:
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);
}
}
l'import poo.inout.*;
premetto che è corretto, infatti inout si trova in C:\poo\
a me sembra TUTTO corretto!!!!! :cry: :cry: :cry:
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
:cry: :cry: :cry: VI PREGO DATEMI UNA MANO!
Che io sto uscendo un po' pazzo!!!
e se il problema risulterà banale.. scusatemi..
Grazie a tutti!!!