Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 1, 9 CFU => Topic started by: Giovi89 on 15-01-2009, 18:36:58



Title: esrcitazione in vista del 26
Post by: Giovi89 on 15-01-2009, 18:36:58
qualcuno puo dirmi perchè questo cidice mi segnala errore
Code:
class esercizio1
{
public static boolean metodo(String [][] A)
{
boolean t=false;
char c,e;
for(int i=0;i<A.length-1&&t==false;i++)
   for(int k=0;k<A[i].length&&t==false;k++)
{
for(int a=0;a<(A[i][k].length())/2;a++)
{
c=A[i][k].charAt(A[i][k].length()-a);
e=A[i][k].charAt(a);
A[i][k].charAt(A[i][k].length()-a)=e;
A[i][k].charAt(a)=c;
}
for(int x=i+1;x<A.length&&t==false;x++)
  for(int b=0;b<A[x].length&&t==false;b++)
             if(A[i][k].equals(A[x][b]))
     t=true;
}
}
}

public class ciao
{
public static void main(String [][] args)
{
String [][] A={ {"giovanni","ciao","virgilio"},
{"google","oaic"},
{"innavoig"} };
System.out.println(esercizio1.metodo(A));
}
}
Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di stringhe, e
restituisca un boolean che indichi se esitono due righe compatibili in A. Due righe r1 ed r2 si dicono
compatibili se esiste una stringa in r1 e contemporaneamente la sua inversa in r2.

risp al più presto grazie..anticipate


Title: Re:esrcitazione in vista del 26
Post by: hax on 15-01-2009, 19:19:03
cosa vuoi fare in queste due istruzioni?
Code:
A[i][k].charAt(A[i][k].length()-a)=e;
A[i][k].charAt(a)=c;
non puoi assegnare una variabile ad un charAt
Comunque non vedo l'utilità di queste istruzioni... commentalo forse capisco cosa vuoi fare.


Title: Re:esrcitazione in vista del 26
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 15-01-2009, 20:02:55
Penso che voglia sostituire caratteri in una stringa, ma quello non è il modo corretto.
Suggerisco di ripassare come funziona l'assegnazione per capire perché ciò che si è scritto non funziona .ciaociao.


Title: Re:esrcitazione in vista del 26
Post by: Fr3d3R!K on 15-01-2009, 20:11:14
infatti hai fatto un pò di confusione. Vediamo di "sciogliere il nodo". Innanzitutto, come ha detto giustamente hax, il charAt(int) (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#charAt(int)) è un metodo, non gli puoi assegnare variabili, anzi deve essere egli stesso assegnato a qualche variabile (in quanto ritorna un valore che nel nostro caso è un char). Tu in quel programma devi solo confrontare la "prima" riga (relativamente al ciclo) dall'inizio alla fine, e la "seconda" dalla fine all'inizio. Detto in "parole più semplici", dentro il ciclo l'istruzione chiave è:
Code:
if(A[i][k].charAt(a)==A[i][k].charAt(A[i][k].length()-a)) //che tu memorizzi rispettivamente in "e" ed in "c"
Il codice però quotato anche da hax non ha assolutamente senso... .wink


Title: Re:esrcitazione in vista del 26
Post by: Giovi89 on 15-01-2009, 22:14:29
Io volevo prima invertire la stringa e poi la voglio confrontare con quelle delle altre riughe se qualcuno puo dirmi u n metodo come invertire le stringhe??.... .ciaociao .ciaociao


Title: Re:esrcitazione in vista del 26
Post by: Giovi89 on 15-01-2009, 22:17:40
ho provato a fare una classe di ereditarietà ma nn capisco questi errori:
eureka.java:35: cannot find symbol
symbol  : variable A
location: class rettangolo
      super(A,A);
            ^
eureka.java:35: cannot find symbol
symbol  : variable A
location: class rettangolo
      super(A,A);
              ^
eureka.java:52: cannot find symbol
symbol  : variable A
location: class rombo
      super(A);
            ^
eureka.java:65: cannot find symbol
symbol  : constructor rettangolo()
location: class rettangolo
      rettangolo b=new rettangolo();
                   ^
4 errors
il codice è questo, voglio creare una ereditarietà della classe quadrilatero
Code:
import java.math.*;
class quadrilatero
{
double lato1,lato2,lato3,lato4;

public quadrilatero()
{
lato1=4d;
lato2=5d;
lato3=7d;
lato4=8d;
}

public double perimetro()
{
return lato1+lato2+lato3+lato4;
}

public double area()
{
return Math.sqrt((perimetro()/2-lato1)*(perimetro()/2-lato2)*(perimetro()/2-lato3)*(perimetro()/2-lato4));
}
public String getinfo()
{
String info="il quadrilatero ha perimetro";
info+=""+perimetro();
info+="e area"+area();
return info;
}
}
class rettangolo extends quadrilatero
{
public rettangolo(int d, int w)
{
super(A,A);
}

public double perimetro()
{
return 2*lato1+2*lato3;
}
public double area()
{
return lato1*lato3;
}
}

class rombo extends quadrilatero
{
public rombo()
{
super(A);
}

public double perimetro()
{
return 4*lato1;
}
}
public class eureka
{
public static void main(String [] args)
{
quadrilatero a=new quadrilatero();
rettangolo b=new rettangolo();
rombo d=new rombo();

System.out.println(a.perimetro()+" "+a.area());
System.out.println(b.perimetro()+" "+b.area());
System.out.println(d.perimetro());
}
}
se qualcuno puo corregerlo? Grazie anticipate!!


Title: Re:esrcitazione in vista del 26
Post by: TheSpecialOne on 15-01-2009, 22:21:37
ho provato a fare una classe di ereditarietà ma nn capisco questi errori:
eureka.java:35: cannot find symbol
symbol  : variable A
location: class rettangolo
      super(A,A);
            ^
eureka.java:35: cannot find symbol
symbol  : variable A
location: class rettangolo
      super(A,A);
              ^
eureka.java:52: cannot find symbol
symbol  : variable A
location: class rombo
      super(A);
            ^
eureka.java:65: cannot find symbol
symbol  : constructor rettangolo()
location: class rettangolo
      rettangolo b=new rettangolo();
                   ^
4 errors
il codice è questo, voglio creare una ereditarietà della classe quadrilatero
Code:
import java.math.*;
class quadrilatero
{
double lato1,lato2,lato3,lato4;

public quadrilatero()
{
lato1=4d;
lato2=5d;
lato3=7d;
lato4=8d;
}

public double perimetro()
{
return lato1+lato2+lato3+lato4;
}

public double area()
{
return Math.sqrt((perimetro()/2-lato1)*(perimetro()/2-lato2)*(perimetro()/2-lato3)*(perimetro()/2-lato4));
}
public String getinfo()
{
String info="il quadrilatero ha perimetro";
info+=""+perimetro();
info+="e area"+area();
return info;
}
}
class rettangolo extends quadrilatero
{
public rettangolo(int d, int w)
{
super(A,A);
}

public double perimetro()
{
return 2*lato1+2*lato3;
}
public double area()
{
return lato1*lato3;
}
}

class rombo extends quadrilatero
{
public rombo()
{
super(A);
}

public double perimetro()
{
return 4*lato1;
}
}
public class eureka
{
public static void main(String [] args)
{
quadrilatero a=new quadrilatero();
rettangolo b=new rettangolo();
rombo d=new rombo();

System.out.println(a.perimetro()+" "+a.area());
System.out.println(b.perimetro()+" "+b.area());
System.out.println(d.perimetro());
}
}
se qualcuno puo corregerlo? Grazie anticipate!!

nel costruttore dovevi inserire (double 4d,  double 5d)ecc...per tutti i parametri


Title: Re:esrcitazione in vista del 26
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 16-01-2009, 02:30:25
ho provato a fare una classe di ereditarietà ma nn capisco questi errori:
[...]
nel costruttore dovevi inserire (double 4d,  double 5d)ecc...per tutti i parametri
.penso

mmm, temo abbia fatto confusione anche tu :boh...
Rispondendo, invece, al post di Giovi89 (http://forum.sdai.unict.it/index.php?topic=859.msg5179#msg5179), tento di spiegare gli errori che il compilatore segnala.

eureka.java:35: cannot find symbol
symbol  : variable A
location: class rettangolo
                super(A,A);
                      ^

Questo vuol dire che il compilatore non riesce a trovare il simbolo "variabile A" quando tenta di compilare l'istruzione super(A,A) in riga 35 nel file eureka.java, in una delle istruzioni della classe rettangolo, e si sta riferendo alla prima A dopo la parentesi aperta.
Ragionando da programmatore, guardo il codice ed effettivamente noto che A non è stata mai dichiarata da nessuna parte, di conseguenza non si trova il suo simbolo (viene solo usata, senza sapere né cosa è ne con cosa è stato inizializzato).
Soluzione: devi definire chi è A.

eureka.java:35: cannot find symbol
symbol  : variable A
location: class rettangolo
                super(A,A);

Stesso errore di prima, ma stavolta ci riferiamo alla seconda occorrenza di A in quella riga.

eureka.java:52: cannot find symbol
symbol  : variable A
location: class rombo
                super(A);

Stesso errore di prima, ma stavolta ci riferiamo alla occorrenza di A che si trova in riga 52. Si vede che stavolta in più siamo nel codice della classe rombo, e non più rettangolo.

eureka.java:65: cannot find symbol
symbol  : constructor rettangolo()
location: class rettangolo
                rettangolo b=new rettangolo();
                             ^

Questo errore indica che non si riesce a trovare il simbolo "costruttore rettangolo ()" che viene richiamato dalla riga 65 nel file eureka.java, nella classe rettangolo in particolare.

Il codice ha altri errori comunque.
Se anche correggi questi errori noterai che la classe genitore di rettangolo, cioè quadrilatero, non ha alcun costruttore nella forma quadrilatero (numero var1, numero var2, numero var3, numero var4) (ove con numero indico un tipo numerico perché nel tuo caso penso tu voglia passare numero).

Quindi, ti consiglio di scrivere un costruttore di rettangolo che accetti quattro numeri che assegnerai poi alle quattro variabili d'istanza laton, e poi di richiamare tale costruttore da dentro la classe rettangolo passandogli valori a due a due uguali, e sempre di richiamare tale costruttore da dentro la classe rombo passandogli quattro volte lo stesso valore.
Il valore/i da passare nei costruttori di rombo e rettangolo dovrebbero essere valori presi in input dai costruttori stessi, quindi conviene che i costruttori accettino rispettivamente 2 valori per il costruttore di rettangolo e 1 valore per il costruttore di rombo.
 .ciaociao


Title: Re:esrcitazione in vista del 26
Post by: Vivynz on 20-01-2009, 10:50:05
Questo esercizio può essere giusto fatto così?ho un pò di problemi nel trovare le colonne uguali...

Code:
/*Scrivere un metodo che prenda in input tre matrici, con le stesse dimensioni, di double e restituisca
un boolean che indichi se le tre matrici presentano (in qualunque posizione) una colonna comune.
P.S.: Due double sono considerati uguali se differiscono per meno di un millesimo*/
public class NewEs1
{
public static boolean colonnaUguale(double[][] A,double[][] B,double[][] C)
{
int r=A.length;
int c=A[0].length;
double[] temp1=new double[r];
double[] temp2=new double[r];
double[] temp3=new double[r];
for(int c1=0;c1<c;c1++)
for(int c2=0;c2<c;c2++)
for(int c3=0;c3<c;c3++)
{
for(int r1=0;r1<r;r1++)
{
temp1[r1]=A[r1][c1];
temp2[r1]=B[r1][c2];
temp3[r1]=C[r1][c3];
}
boolean vero=true;
for(int riga=0;riga<temp1.length&&vero;riga++)
if((temp1[riga]!=temp2[riga])||(temp1[riga]!=temp3[riga]))
vero=false;
if(vero)
return true;
}
return false;

}
public static void main (String[] args)
{
double[][] A={{5D,11D,27D,34D},{6D,9D,0D,78D},{7D,54D,1D,5D}};
double[][] B={{44D,21D,5D,12D},{7D,43D,6D,90D},{38D,65D,7D,7D}};
double[][] C={{51D,98D,13D,89D},{6D,6D,6D,6D},{7D,0D,72D,99D}};
boolean b=colonnaUguale(A,B,C);
System.out.println(b);
}
}

l'esercizio postato in precedenza da Giovi89 io l'ho fatto così..c'è qualche errore di cui non mi sono accorta?(cioè c'è qualche caso in cui dovrebbe restituire false e invece restituisce true o viceversa?oppure è giusto?)

Code:
/*Scrivere un metodo che prenda in input un array bidimensionale frastagliato A di stringhe, e
restituisca un boolean che indichi se esitono due righe compatibili in A. Due righe r1 ed r2 si dicono
compatibili se esiste una stringa in r1 e contemporaneamente la sua inversa in r2*/
public class NewEs2
{
public static boolean righeCompatibili(String[][] A)
{
for(int r1=0;r1<A.length-1;r1++)
for(int r2=r1+1;r2<A.length;r2++)
for(int c1=0;c1<A[r1].length;c1++)
for(int c2=0;c2<A[r2].length;c2++)
{
boolean ok=false;
boolean stop=false;
if(A[r1][c1].length()==A[r2][c2].length())
for(int k=0;k<A[r1][c1].length()&&!stop;k++)
if(A[r1][c1].charAt(k)==A[r2][c2].charAt(A[r2][c2].length()-1-k))
ok=true;
else
{
ok=false;
stop=true;
}

if(ok&&!stop)
return true;
}
return false;
}
public static void main (String[] args)
{
String[][] s={{"ciao","sole","luna","albero"},{"occhiali","fazzoletto"},{"matita","divano","oaic"}};
boolean b=righeCompatibili(s);
System.out.println(b);
}
}


Title: Re:esrcitazione in vista del 26
Post by: rox on 20-01-2009, 15:19:51
qualcuno mi potrebbe dire cosa c'è di sbagliato in questo codice?
Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe e
restituisca una matrice S’ ottenuta da S eliminando tutti i caratteri ‘x’ ed ‘y’.
Code:
class dieci{
public static String [][]dieci(String[][]a)
{String [][]b=new String[a.length][];
for (int i=0;i<a.length;i++)
{
for (int j=0;j<a[i].length;j++)
{
for (int k=0;k<a[i][j].length();k++)
{
if(a[i][j].charAt(k)!='x'||a[i][j].charAt(k)!='y')
b[i][j]+=" "+a[i][j].charAt(k);
}
}
}return b;
}
}
public class decimo{
public static void main (String args[]){
String [][]a={{"ciao","come","stxxai?"},
                    {"io","beyyne","e","tu?"},
    {"cosa","haxyi","fatto","pomexxyriggio","ay","lezxyxyione?"}};
String [][]b=dieci.dieci(a);
for (int i=0;i<b.length;i++)
{
for(int j=0;j<a[i].length;j++)
{
System.out.print(b[i][j]+"\t");
}
System.out.println("     ");
}
}
}
questi sono gli errori:
Code:
Exception in thread "main" java.lang.NullPointerException
at dodici.dodici(dodicesimo.java:10)
at dodicesimo.main(dodicesimo.java:21)
grazie in anticipo


Title: Re:esrcitazione in vista del 26
Post by: Aigor on 20-01-2009, 15:50:30
qualcuno mi potrebbe dire cosa c'è di sbagliato in questo codice?
Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe e
restituisca una matrice S’ ottenuta da S eliminando tutti i caratteri ‘x’ ed ‘y’.
Code:
class dieci{
public static String [][]dieci(String[][]a)
{String [][]b=new String[a.length][];
for (int i=0;i<a.length;i++)
{
for (int j=0;j<a[i].length;j++)
{
for (int k=0;k<a[i][j].length();k++)
{
if(a[i][j].charAt(k)!='x'||a[i][j].charAt(k)!='y')
b[i][j]+=" "+a[i][j].charAt(k);
}
}
}return b;
}
}
public class decimo{
public static void main (String args[]){
String [][]a={{"ciao","come","stxxai?"},
                    {"io","beyyne","e","tu?"},
    {"cosa","haxyi","fatto","pomexxyriggio","ay","lezxyxyione?"}};
String [][]b=dieci.dieci(a);
for (int i=0;i<b.length;i++)
{
for(int j=0;j<a[i].length;j++)
{
System.out.print(b[i][j]+"\t");
}
System.out.println("     ");
}
}
}
questi sono gli errori:
Code:
Exception in thread "main" java.lang.NullPointerException
at dodici.dodici(dodicesimo.java:10)
at dodicesimo.main(dodicesimo.java:21)
grazie in anticipo

 .huh
Perchè ti crei una classe dieci ??  .huh
E soprattutto perchè l'errore è sul file dodicesimo.java quando questo tutt'al più dovrebbe chiamarsi decimo.java  .huh



Title: Re:esrcitazione in vista del 26
Post by: rox on 20-01-2009, 16:13:52
scusate ho sbagliato a postare l'errore segnalato dalla jvm. l'errore è questo:
Code:
xception in thread "main" java.lang.NullPointerException
at dieci.dieci(decimo.java:12)
at decimo.main(decimo.java:24)
è che stavo facendo in contemporanea molti esercizi!


Title: Re:esrcitazione in vista del 26
Post by: hax on 20-01-2009, 16:16:00
il dubbio del perchè ti crei la classe dieci rimane...
Comunque anche se tu volessi usare un oggetto chiamato dieci... dov'è il costruttore?


Title: Re:esrcitazione in vista del 26
Post by: fabliux on 20-01-2009, 17:16:28
qualcuno mi potrebbe dire cosa c'è di sbagliato in questo codice?
Scrivere un metodo che prenda in input una matrice bidimensionale frastagliata S di stringhe e
restituisca una matrice S’ ottenuta da S eliminando tutti i caratteri ‘x’ ed ‘y’.
Code:
class dieci{
public static String [][]dieci(String[][]a)
{String [][]b=new String[a.length][];
for (int i=0;i<a.length;i++)
{
for (int j=0;j<a[i].length;j++)
{
for (int k=0;k<a[i][j].length();k++)
{
if(a[i][j].charAt(k)!='x'||a[i][j].charAt(k)!='y')
b[i][j]+=" "+a[i][j].charAt(k);
}
}
}return b;
}
}
public class decimo{
public static void main (String args[]){
String [][]a={{"ciao","come","stxxai?"},
                    {"io","beyyne","e","tu?"},
    {"cosa","haxyi","fatto","pomexxyriggio","ay","lezxyxyione?"}};
String [][]b=dieci.dieci(a);
for (int i=0;i<b.length;i++)
{
for(int j=0;j<a[i].length;j++)
{
System.out.print(b[i][j]+"\t");
}
System.out.println("     ");
}
}
}
questi sono gli errori:
Code:
Exception in thread "main" java.lang.NullPointerException
at dodici.dodici(dodicesimo.java:10)
at dodicesimo.main(dodicesimo.java:21)
grazie in anticipo



Adesso dovrebbe essere corretto....io nn l'ho ancora provato....
Code:
public class paura2
{
public static void main(String []args)
{
String S[][]={{"sex","pry","yxs"},{"yex","xiy","yer"},{"xyk","iax","xoy"}};
String elio[][]=metodo(S);
for(int i=0;i<elio.length;i++)
{
for(int j=0;j<elio[i].length;j++)
{
System.out.println(elio[i][j]);
}
}
}
public static String[][] metodo(String [][]s)
{
String out[][]=new String[s.length][];
for(int i=0;i<s.length;i++)
{
out[i]=new String[s[i].length];
for(int j=0;j<s[i].length;j++)
{
for(int k=0;k<s[i][j].length();k++)
{
if(s[i][j].charAt(k)!='x' && s[i][j].charAt(k)!='y')
{
out[i][j]+=s[i][j].charAt(k);
}
}
}
}
return out;
}
}


Title: Re:esrcitazione in vista del 26
Post by: rox on 20-01-2009, 17:17:44
il costruttore non l'ho creato perchè il metodo l'ho dichiarato static,cmq l'ho risolto grazie lo stesso


Title: Re:esrcitazione in vista del 26
Post by: rox on 20-01-2009, 18:51:08
qualcuno mi saprebbe dire dove sbaglio?
Scrivere un metodo che prenda in input un array bidimensionale A di long, e restituisca un array A’
ottenuto da A ordinando in senso crescente gli elementi in ogni singola colonna di indice dispari.
Es.: Input : [(2,6,4), (1,9,0), (3,7,7), (5,8,5)], Output : [(2,6,4), (1,7,0), (3,8,7), (5,9,5)].
ecco il codice:
Code:
class quindici{
public static long[][] quindici(long[][]a)
{long min=0;
long [][]b=new long[a.length][a.length];
for (int i=0;i<a.length;i++)
{
for (int j=1;j<a[i].length;j++)
{
if(a[i][j-1]>a[i][j])
{
min=a[i][j];
a[i][j]=a[i][j-1];
a[i][j-1]=min;
b[i][j]=a[i][j];
}
         


}
}return b;
}
}
public class quindicesimo
{
public static void main (String args[])
{
long [][]a={{1,2,3},
    {7,8,4},
    {3,5,7}};
        long [][]b=quindici.quindici(a);
for(int i=0;i<b.length;i++)
    { for(int j=0;j<b[i].length;j++)
    {
    System.out.print(b[i][j]+"\t");
    }System.out.println("     ");
      }
      }
      }
il codice compila e parte ma non fa quello chiesto dall'esercizio!


Title: Re:esrcitazione in vista del 26
Post by: Fr3d3R!K on 20-01-2009, 19:26:58
in questo (http://forum.sdai.unict.it/index.php?topic=701.0) topic è stato già fatto l'esercizio, vedi se ti può essere utile! soprattutto per quel che riguarda la gestione delle colonne dispari (non vedo nessuna istruzione che controlli che la colonna sia effettivamente di indice dispari) .wink