Pages: [1]   Go Down
Print
Author Topic: MatriceSenzaXY  (Read 1244 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
ChiaraT91S
Matricola
*
Offline Offline

Posts: 64


« on: 08-12-2012, 22:54:45 »

Code:
/* Data una matrice s di stringhe costruire nuova matrice che non contenga ne x ne y*/
public class SenzaXY

{
     public static void main(String[] args)
   {
final int Nparole=4;
int  i=0,j=0;
char carattere;
String parola="",parolaSenza="";
String[][] s=new String[2][2];
String[][] sSenza=new String [2][2];

System.out.println();
System.out.println("Matrice S1 vuota ");
                             for(i=0;i<2;i++)
      {
           for(j=0;j<2;j++)
          {
carattere=(char)(Math.random()*26+'a');
        System.out.print(" " +s[i][j]);
          }
System.out.println();
      }
System.out.println();      
System.out.println("La matrice S con i caratteri 'x' e 'y' è: ");
            for(i=0;i<2;i++)
      {
           for(j=0;j<2;j++)
          {
   for(int lunghezza=8;lunghezza>0;lunghezza--)
                                   {
                       carattere=(char)(Math.random()*26+'a');
parola+=carattere;
   }
s[i][j]=parola;
parola="";
     System.out.print("   " +s[i][j]);
          }
System.out.println();
      }
        System.out.println();      
System.out.println("La matrice S1 SENZA i caratteri 'x' e 'y' è: ");      
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
      {
               
                        parola=s[i][j];
                        char charArray[]= parola.toCharArray();
                                                                for(int contatore=0;contatore<charArray.length;contatore++)
                        {
carattere=charArray[contatore];
if(carattere!='x'&&carattere!='y')
           {
             parolaSenza+=carattere;

           }
}
sSenza[i][j]=parolaSenza;
parolaSenza="";
System.out.print("   "+sSenza[i][j]);
      }
      System.out.println();
}
   }
}
Logged
ChessPlayer
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 154

Checkmate


« Reply #1 on: 09-12-2012, 12:28:19 »

Potrebbe benissimo funzionare, non l'ho provato, comunque ci tenevo a dirti (immaginando tu sia di primo anno) che la prima prova è basata su metodi generici, cioè non inizializzati e, soprattutto, senza main. Questo è lo stesso esercizio fatto da me sotto forma di metodo (come richiesto dal prof.):

public class _71212
{
   String[][] _71212(String[][]A){
      String[][]B=new String[A.length][A[0].length];
      for(int n=0;n<A.length;n++){
         for(int m=0;m<A[0].length;m++){
            for(int s=0;s<A[n][m].length();s++){
               if(A[m][n].charAt(s)=='x'||A[m][n].charAt(s)=='y')
                  B[m][n]=A[m][n].substring(0,s)+A[m][n].substring(s+1,A[m][n].length());
            }
         }
      }
      return B;
   }
}

PS: nell'esame non va inserito nemmeno 'public class esercizio', ma si inizia direttamente dall'intestazione del metodo.

Spero di essere stato chiaro, se non hai capito qualcosa chiedi pure  .
Logged

Ad ogni azione corrisponde una reazione uguale e contraria.
Ciadamidaro Davide
Matricola
*
Offline Offline

Posts: 34


« Reply #2 on: 09-12-2012, 12:30:53 »

Potrebbe benissimo funzionare, non l'ho provato, comunque ci tenevo a dirti (immaginando tu sia di primo anno) che la prima prova è basata su metodi generici, cioè non inizializzati e, soprattutto, senza main. Questo è lo stesso esercizio fatto da me sotto forma di metodo (come richiesto dal prof.):

public class _71212
{
   String[][] _71212(String[][]A){
      String[][]B=new String[A.length][A[0].length];
      for(int n=0;n<A.length;n++){
         for(int m=0;m<A[0].length;m++){
            for(int s=0;s<A[n][m].length();s++){
               if(A[m][n].charAt(s)=='x'||A[m][n].charAt(s)=='y')
                  B[m][n]=A[m][n].substring(0,s)+A[m][n].substring(s+1,A[m][n].length());
            }
         }
      }
      return B;
   }
}

PS: nell'esame non va inserito nemmeno 'public class esercizio', ma si inizia direttamente dall'intestazione del metodo.

Spero di essere stato chiaro, se non hai capito qualcosa chiedi pure  .

nella tua soluzione se non ci sono ne x o y nella stringa in A la stringa in B(meglio scriverle in minuscolo per convenzione) resta vuota, e il professore non voleva che si usassero metodi come il substring



Code:

System.out.println();
System.out.println("Matrice S1 vuota ");
                           for(i=0;i<2;i++)
     {
          for(j=0;j<2;j++)
         {
carattere=(char)(Math.random()*26+'a');
       System.out.print(" " +s[i][j]);
         }
System.out.println();
     }


non ho capito a che serve questa parte
cmq io l'ho risolto cosi (metodo elimina)
Code:
package matrici6;

import javax.swing.*;

class Matrice
  {
    private String[][] m;
    
    public Matrice()
      {
        int i,j,k;
        int r=Integer.parseInt(JOptionPane.showInputDialog("Inserisci il numero di righe della matrice"));
        m= new String [r][];
        int l;
        String p="";
        
        for(i=0;i<m.length;i++)
          {
            int c=Integer.parseInt(JOptionPane.showInputDialog("Inserisci la grandezza della colonna "+i));
            m[i]= new String[c];
          }
        
        for(i=0;i<m.length;i++)
            for(j=0;j<m[i].length;j++)
              {                
                p="";
                l=((int)(Math.random()*6+1));
                for(k=0;k<l;k++)
                    p+=(char)(Math.random()*26+'a');
                m[i][j]=p;
                
              }
      }
    
    public void getMatrice()
      {
        int i,j;
        for(i=0;i<m.length;i++)
          {
            for(j=0;j<m[i].length;j++)              
                System.out.print(m[i][j]+" ");                        
            System.out.println();
          }
      }
    
    public void concatena()
      {
        int i;
        int j=Integer.parseInt(JOptionPane.showInputDialog("Inserisci il numero della colonna da concatenare"))-1;
        String t1="",t2="";
        
        for(i=0;i<m.length;i++)
          {
            if(j<m[i].length)
              {
                t1+=m[i][j].charAt(0);
                t2+=m[i][j].charAt(m[i][j].length()-1);
              }
            else
              {
                t1+='?';
                t2+='?';
              }
          }
        t1+=t2;
        System.out.println("\nLa Stringa concatenata è:\n"+t1);
      }
    
    public void elimina()
      {
        int i,j,k;
        String[][] s= new String[m.length][];
        for(i=0;i<m.length;i++)
            s[i]= new String[m[i].length];        
        
        for(i=0;i<m.length;i++)
            for(j=0;j<m[i].length;j++)
              {
                String t="";
                for(k=0;k<m[i][j].length();k++)
                  {
                    if((m[i][j].charAt(k)!='x') && (m[i][j].charAt(k)!='y'))
                        t+=m[i][j].charAt(k);
                  }
                s[i][j]=t;
              }
        
        System.out.println("\nLa matrice senza 'x' e 'y' è:");
        for(i=0;i<s.length;i++)
          {
            for(j=0;j<s[i].length;j++)              
                System.out.print(s[i][j]+" ");                        
            System.out.println();
          }
      }
  }

public class Matrici6
  {
    public static void main(String[] args)
      {
        Matrice m=new Matrice();
        
        m.getMatrice();
        m.concatena();
        m.elimina();
      }
  }
« Last Edit: 09-12-2012, 12:40:15 by Ciadamidaro Davide » Logged
ChiaraT91S
Matricola
*
Offline Offline

Posts: 64


« Reply #3 on: 09-12-2012, 12:42:01 »

Potrebbe benissimo funzionare, non l'ho provato, comunque ci tenevo a dirti (immaginando tu sia di primo anno) che la prima prova è basata su metodi generici, cioè non inizializzati e, soprattutto, senza main. Questo è lo stesso esercizio fatto da me sotto forma di metodo (come richiesto dal prof.):

public class _71212
{
   String[][] _71212(String[][]A){
      String[][]B=new String[A.length][A[0].length];
      for(int n=0;n<A.length;n++){
         for(int m=0;m<A[0].length;m++){
            for(int s=0;s<A[n][m].length();s++){
               if(A[m][n].charAt(s)=='x'||A[m][n].charAt(s)=='y')
                  B[m][n]=A[m][n].substring(0,s)+A[m][n].substring(s+1,A[m][n].length());
            }
         }
      }
      return B;
   }
}

PS: nell'esame non va inserito nemmeno 'public class esercizio', ma si inizia direttamente dall'intestazione del metodo.

Spero di essere stato chiaro, se non hai capito qualcosa chiedi pure  .
chiarissimo ..grazie!  credevo di dover scrivere tutto il programma Tongue
cmq non ho utilizzato le funzioni substring e charAt perché quando ho fatto questo esercizio non le avevo ancora studiate..utilizzandole il metodo è più compatto e breve
Logged
ChiaraT91S
Matricola
*
Offline Offline

Posts: 64


« Reply #4 on: 09-12-2012, 12:44:20 »

[...] -omissis del moderatore - citazione troppo lunga! Rende illegibile la discussione  testate[...]
Di servire non serve a niente   ..stampa solo la matrice con null..
« Last Edit: 10-12-2012, 00:58:04 by reversengineer » Logged
Zallak
Matricola
*
Offline Offline

Posts: 72


« Reply #5 on: 09-12-2012, 18:12:56 »

Io l'ho risolto così 
Code:
public class MatriceSenzaxey
{
public static void main (String[] args)
{
final int R = 10, COL = 5;
String a[] [] = new String [R] [COL];
int iaR, iaC;

for(iaR = 0; iaR < R; iaR++)
{
for(iaC = 0; iaC < COL; iaC++)
{
int lunghezza = (int) (Math.random()*13 + 3);
String parola = "";

do{
char x = (char) ((Math.random() * 26 + 'a'));
parola += x;
lunghezza--;
   } while (lunghezza > 0);
   
   a[iaR] [iaC] = parola;
}
}

System.out.println("La matrice a:");

for(iaR = 0; iaR < R; iaR++)
{
for(iaC = 0; iaC < COL; iaC++)
{
System.out.print(a[iaR] [iaC]+' ');
}

System.out.println();
}

for(iaR = 0; iaR < R; iaR++)
{
for(iaC = 0; iaC < COL; iaC++)     //Scandisce ogni elemento della matrice.
{
int p = 0;

do{
boolean trovato = false;      //Serve per stabilire se è necessario o meno incrementare p.
if(a[iaR] [iaC].charAt(p) == 'x' || a[iaR] [iaC].charAt(p) == 'y') //Scandisce ogni carattere della strigna e apena ne trova uno uguale ad x o ad y....
{
String tmp = a[iaR] [iaC];     //Salva la stinga in tmp.
a[iaR] [iaC] = "";                //La azzera.
int p2 = 0;
trovato = true;

do{
if(p2 != p)
{
a[iaR] [iaC] += tmp.charAt(p2);
}

p2++;
    } while(p2 < tmp.length());        //Riscrive la stringa saltando il carattere in posizione p (che è x o y).
}

if(!trovato)    //Se la stringa è stata riscritta con un carattere in meno l'incremento di p non deve essere effettuato.
{
p++;
}

     } while(p < a[iaR] [iaC].length());
}

}

System.out.println("La matrice a1:");

for(iaR = 0; iaR < R; iaR++)
{
for(iaC = 0; iaC < COL; iaC++)
{
System.out.print(a[iaR] [iaC]+' ');
}

System.out.println();
}
}
}
Logged
ChessPlayer
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 154

Checkmate


« Reply #6 on: 09-12-2012, 20:37:47 »

nella tua soluzione se non ci sono ne x o y nella stringa in A la stringa in B(meglio scriverle in minuscolo per convenzione) resta vuota, e il professore non voleva che si usassero metodi come il substring

Essendo stato assente e avendo ricevuto i testi degli esercizi via Facebook mi saranno stati dati leggermente diversi da come il prof. voleva che li svolgessimo, quindi ho ritenuto opportuno e sbrigativo usare substring e charAt, facilmente sostituibili con stringhe ottenute dalla concatenazione dei caratteri (sostituto del substring) letti via via attraverso un if (sostituto del charAt). Comunque: resta vuota, ovvio errore di svista, ho scritto il metodo alle 23.30  testate basta aggiungere un else B[m][n]=A[m][n] . Grazie comunque per avermelo fatto notare  .
Logged

Ad ogni azione corrisponde una reazione uguale e contraria.
Ciadamidaro Davide
Matricola
*
Offline Offline

Posts: 34


« Reply #7 on: 10-12-2012, 14:55:37 »

nella tua soluzione se non ci sono ne x o y nella stringa in A la stringa in B(meglio scriverle in minuscolo per convenzione) resta vuota, e il professore non voleva che si usassero metodi come il substring

Essendo stato assente e avendo ricevuto i testi degli esercizi via Facebook mi saranno stati dati leggermente diversi da come il prof. voleva che li svolgessimo, quindi ho ritenuto opportuno e sbrigativo usare substring e charAt, facilmente sostituibili con stringhe ottenute dalla concatenazione dei caratteri (sostituto del substring) letti via via attraverso un if (sostituto del charAt). Comunque: resta vuota, ovvio errore di svista, ho scritto il metodo alle 23.30  testate basta aggiungere un else B[m][n]=A[m][n] . Grazie comunque per avermelo fatto notare  .

c'è anche un altro errore, se nella parola c'è più di un 'x' o 'y' cancella solo l'ultima (esempio se la parola è abcxdey la parola diventa: abcxde)
Logged
ChessPlayer
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 154

Checkmate


« Reply #8 on: 10-12-2012, 16:41:56 »


c'è anche un altro errore, se nella parola c'è più di un 'x' o 'y' cancella solo l'ultima (esempio se la parola è abcxdey la parola diventa: abcxde)


Sei sicuro ?    La s che aumenta l'ho messa apposta, fammi capire per favore.
Logged

Ad ogni azione corrisponde una reazione uguale e contraria.
Jimmy93
Matricola
*
Offline Offline

Posts: 74



« Reply #9 on: 10-12-2012, 19:32:36 »

Questo è il mio codice, funziona però non so se sia il più "elegante"   Come vi sembra,cerco consigli  I
Code:
public class Stringhexy
{public static void main(String[] args)
  {int i=0, j=0,t=0;
    char b;
    String S[][]=new String[2][2];
    String S1[][]=new String[2][2];
    for(i=0;i<S.length;i++){
for(j=0;j<S.length;j++){
S[i][j]="";
for(t=0;t<8;t++){
    S[i][j]+=(char)(Math.random()*26+97);
       }
        }
     }
     System.out.println("Array S \n");
     for(i=0;i<S.length;i++){
         for(j=0;j<S.length;j++){
System.out.println(S[i][j]);
}
     }
     for(i=0;i<S.length;i++){
for(j=0;j<S.length;j++){
S1[i][j]="";
for(t=0;t<S[i][j].length();t++){
 b=S[i][j].charAt(t);
 if(b!='x'&&b!='y')
         S1[i][j]+=b;
       }
}
      }
      System.out.println("Array S1 \n");
      for(i=0;i<S.length;i++){
         for(j=0;j<S.length;j++){
System.out.println(S1[i][j]);
}
     }
      
  }
}
Logged
Ciadamidaro Davide
Matricola
*
Offline Offline

Posts: 34


« Reply #10 on: 11-12-2012, 05:33:48 »


c'è anche un altro errore, se nella parola c'è più di un 'x' o 'y' cancella solo l'ultima (esempio se la parola è abcxdey la parola diventa: abcxde)


Sei sicuro ?    La s che aumenta l'ho messa apposta, fammi capire per favore.

quando trova una x o y fa la substring da 0 fino al carattere prima di quella x o y, percio se trova "abcxdeyfg" quando trova la x scrive "abcdeyfg" e quando trova la y scrive "abcxdefg"
Logged
ChessPlayer
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 154

Checkmate


« Reply #11 on: 11-12-2012, 09:27:40 »

public class _71212
{
   String[][] _71212(String[][]A){
      String[][]B=new String[A.length][A[0].length];
      for(int n=0;n<A.length;n++){
         for(int m=0;m<A[0].length;m++){
            for(int s=0;s<A[n][m].length();s++){
               if(A[m][n].charAt(s)=='x'||A[m][n].charAt(s)=='y'){
                     s++;
               }else    B[m][n]=B[m][n]+A[m][n].charAt(s);
            }
         }
      }
      return B;
   }
}

Ora dovrebbe essere giusto   
Logged

Ad ogni azione corrisponde una reazione uguale e contraria.
Pages: [1]   Go Up
Print
Jump to: