Visualizzazione dei risultati da 1 a 9 su 9

Discussione: ProblemaStringa JAVA

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    10

    ProblemaStringa JAVA

    Ragazzi ho un problemino banale ma ci sto sbattendo la testa da un po'. In poche parole ho una Stringa A che deriva dal risultato di una particolare funzione. Se stampo a video A con System.out.println(A) il risultato è quello che mi aspetto che sia. Tuttavia però se la trasmetto su un buffer personale la stringa prodotta è una stringa vuota come mai?

    String tmp = new String("CIAO PIPPO");//G.StampaDipendenti();
    MESSAGGIOtoCLIENT = tmp;
    //System.out.println(G.StampaDipendenti());
    OUT.println(MESSAGGIOtoCLIENT);OUT.flush();

    In questa situazione OUT mi da in uscita proprio CIAO PIPPO mentre se tmp = G.StampaDipendenti() l'uscita è una stringa vuota seppure la stringa non lo è dato che ho verificato con System.out.println.

    Quale cervellone mi aiuta?

  2. #2
    Usando la mia stupenda sfera di cristallo.....
    vedo....vedo...
    molto probabilmente nel metodo stampaDipedenti ritorini una stringa vuota o null...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    10
    Originariamente inviato da francesco.muia
    Usando la mia stupenda sfera di cristallo.....
    vedo....vedo...
    molto probabilmente nel metodo stampaDipedenti ritorini una stringa vuota o null...

    Ma che geni che ci sono in giro -.-''. Spero di essermi espresso in italiano, la stringa non è vuota dal momento che se la stampo con System.out.println() me la legge.

  4. #4
    String tmp = new String("CIAO PIPPO");//G.StampaDipendenti();
    MESSAGGIOtoCLIENT = tmp;
    //System.out.println(G.StampaDipendenti());
    OUT.println(MESSAGGIOtoCLIENT);OUT.flush();
    Questo è l'unico pezzo di codice che hai riportato, secondo te come ti si fa a dare una mano...
    l'unica cosa che vedo qui è che la chiamata al metodo è commentata, fai una System.out di StampaDipendenti (anche questa commentata). E scrivi sul un ipotetico OUT di cui nn sappiamo nulla.
    Mi sa che il genio sei tu se pensi che qualcuno ti possa aiutare nn sapendo il codice che scrivi

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    10
    Originariamente inviato da francesco.muia
    Questo è l'unico pezzo di codice ..
    Ecco il Codice:

    codice:
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
    
    
    public class Client extends Thread{
    	
    	
    	private String nomehost;
    	private int numporta;
    	
    	public Client(String NOMEHOST,int NUMPORTA){
    		nomehost = NOMEHOST;
    		numporta = NUMPORTA;
    	}
    	
    	public void run(){
    		
    	Socket connessione = null;
    		
    		try {
    			
    			String tmp=null;
    			String MESSAGGIOTX = null;
    			String MESSAGGIORX = null;
    			BufferedReader Console;
    			BufferedReader INPUT;
    			PrintWriter OUT;
    			
    			do{
    			MESSAGGIOTX = "";	
    			connessione = new Socket(nomehost,numporta);	
    			Console = new BufferedReader(new InputStreamReader(System.in));
    			INPUT = new BufferedReader(new InputStreamReader(connessione.getInputStream()));
     			OUT = new PrintWriter(connessione.getOutputStream());	
    				
    			
     			sleep(1500);
    			
    			System.out.println("\n1. INSERISCI MANAGER");
    			System.out.println("2. INSERISCI PROGRAMMATORE");
    			System.out.println("3. INSERISCI PROGETTO");
    			System.out.println("4. INSERISCI COMPONENTE");
    			System.out.println("5. STAMPA DIPENDENTI");
    			System.out.println("6. STAMPA PROGETTI");
    			System.out.println("7. STAMPA COMPONENTI");
    			System.out.println("0. ESCI");
    			
    			
    			tmp= Console.readLine();
    			MESSAGGIOTX = MESSAGGIOTX+tmp;
    			
    			if(tmp.equals("1"))
    			{
    			System.out.println("NOME: ");
    			tmp = Console.readLine();
    			MESSAGGIOTX = MESSAGGIOTX+"-"+tmp;
    			System.out.println("COGNOME: ");
    			tmp = Console.readLine();
    			MESSAGGIOTX = MESSAGGIOTX+"-"+tmp;
    			}
    			
    			else if(tmp.equals("2"))
    			{
    			System.out.println("NOME: ");
    			tmp = Console.readLine();
    			MESSAGGIOTX = MESSAGGIOTX+"-"+tmp;
    			System.out.println("COGNOME: ");
    			tmp = Console.readLine();
    			MESSAGGIOTX = MESSAGGIOTX+"-"+tmp;
    			}
    			
    			else if(tmp.equals("3"))
    			{
    			System.out.println("NOME: ");
    			tmp = Console.readLine();
    			MESSAGGIOTX = MESSAGGIOTX+"-"+tmp;
    			System.out.println("DESCRIZIONE: ");
    			tmp = Console.readLine();
    			MESSAGGIOTX = MESSAGGIOTX+"-"+tmp;
    			}
    			
    			else if(tmp.equals("4"))
    			{
    			System.out.println("NOME: ");
    			tmp = Console.readLine();
    			MESSAGGIOTX = MESSAGGIOTX+"-"+tmp;
    			System.out.println("LINGUAGGIO: ");
    			tmp = Console.readLine();
    			MESSAGGIOTX = MESSAGGIOTX+"-"+tmp;
    			}
    			
    			else if(tmp.equals("5"))
    			{
    			MESSAGGIOTX	= MESSAGGIOTX+"-STAMPA TUTTI I DIPENDENTI";
    			}
    			
    			else if(tmp.equals("6"))
    			{
    			MESSAGGIOTX	= MESSAGGIOTX+"-STAMPA TUTTI I PROGETTI";
    			}
    			
    			else if(tmp.equals("7"))
    			{
    			MESSAGGIOTX	= MESSAGGIOTX+"-STAMPA TUTTI I COMPONENTI";
    			}
    			
    			
    			
    			System.out.println("INVIO AL SERVER IL MESSAGGIO: "+ MESSAGGIOTX);	
     			OUT.println(MESSAGGIOTX);OUT.flush();
     			
     			MESSAGGIORX = new String(INPUT.readLine());
     			System.out.println("IL SERVER HA INVIATO: "+MESSAGGIORX);
    					
    			}while(!tmp.equals("0"));
     			INPUT.close();OUT.close();Console.close();connessione.close();
    			System.out.println("CLIENT SPENTO");
    			
    			
    			
    		
    		}
    		catch (UnknownHostException e) {e.printStackTrace();}
    		catch (IOException e) {e.printStackTrace();}
    		catch (InterruptedException e) {e.printStackTrace();}
    		
    		
    	}
    
    }

    codice:
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    import GESTORE.Gestore;
    
    
    public class Server extends Thread{
    	
    	private Gestore G = new Gestore();
    	private int numporta;
    	
    	public Server(int NUMPORTA){
    		numporta = NUMPORTA;
    		
    	}
    	
    	public  void run(){
    		
    		try {
    			ServerSocket sconnessione = new ServerSocket(numporta);
    			boolean prop = false;
    			while(!prop){
    				
    				
    				Socket connessione = sconnessione.accept();
    				
    								
    				BufferedReader INPUT = new BufferedReader(new InputStreamReader(connessione.getInputStream()));
    				PrintWriter OUT = new PrintWriter(connessione.getOutputStream());
    				
    				String MESSAGGIORX = new String(INPUT.readLine());
    				
    				String []SPLITMESSAGGIORX = MESSAGGIORX.split("-");
    				
    				String MESSAGGIOtoCLIENT = null;
    				
    				if(SPLITMESSAGGIORX[0].equals("1"))
    				{
    					G.InserisciManager(SPLITMESSAGGIORX[1], SPLITMESSAGGIORX[2]);
    					MESSAGGIOtoCLIENT = "MANAGER AGGIUNTO CON SUCCESSO";
    				}
    				
    				else if(SPLITMESSAGGIORX[0].equals("2"))
    				{
    					G.InserisciProgrammatore(SPLITMESSAGGIORX[1], SPLITMESSAGGIORX[2]);
    					MESSAGGIOtoCLIENT = "PROGRAMMATORE AGGIUNTO CON SUCCESSO";
    				}
    				
    				else if(SPLITMESSAGGIORX[0].equals("3"))
    				{
    					G.InserisciProgetto(SPLITMESSAGGIORX[1], SPLITMESSAGGIORX[2]);
    					MESSAGGIOtoCLIENT = "PROGETTO AGGIUNTO CON SUCCESSO";
    				}
    				
    				else if(SPLITMESSAGGIORX[0].equals("4"))
    				{
    					G.InserisciComponente(SPLITMESSAGGIORX[1], SPLITMESSAGGIORX[2]);
    					MESSAGGIOtoCLIENT = "COMPONENTE AGGIUNTO CON SUCCESSO";
    				}
    				
    				else if(SPLITMESSAGGIORX[0].equals("5"))
    				{
    					String tmp = new String("PERCHE' NON MI STAMPA I DIPENDENTI?");//G.StampaDipendenti();
    					MESSAGGIOtoCLIENT = tmp;
    					System.out.println(G.StampaDipendenti());//DA ELIMINARE
    					//NON CAPISCO PERCHE' NON MI PASSA QUESTA STRINGA
    				}
    				
    				else if(SPLITMESSAGGIORX[0].equals("6"))
    				{
    					String tmp = new String("PERCHE NON STAMPA I PROGETTI?");//G.StampaProgetti();
    					MESSAGGIOtoCLIENT = tmp;
    					System.out.println(G.StampaProgetti());//DA ELIMINARE
    					//NON CAPISCO PERCHE' NON MI PASSA QUESTA STRINGA
    				}
    				
    				else if(SPLITMESSAGGIORX[0].equals("7"))
    				{
    					String tmp = new String("PERCHE NON STAMPA I COMPONENTI?");//G.StampaComponenti();
    					MESSAGGIOtoCLIENT = tmp;
    					System.out.println(G.StampaComponenti());//DA ELIMINARE
    					//NON CAPISCO PERCHE' NON MI PASSA QUESTA STRINGA
    				}
    				
    				else if(SPLITMESSAGGIORX[0].equals("0"))
    				{
    					prop = true;
    					MESSAGGIOtoCLIENT = "SPENGO SERVER E CLIENT";
    				}
    				
    				else
    					MESSAGGIOtoCLIENT = "SCELTA SBAGLIATA, RIPROVA";
    				
    				
    				OUT.println(MESSAGGIOtoCLIENT);OUT.flush();
    				
    				connessione.close();INPUT.close();OUT.close();	
    				
    			}
    				sconnessione.close();
    				System.out.println("SERVER SPENTO");
    		} catch (IOException e) {e.printStackTrace();}
    						
    	}
    
    }
    codice:
    //da finire e aggiungere le altre opzioni in gestore(associa elimina ect)
    public class tESTMAIN {
    	public static void main(String []args){
    		
    		Client C = new Client("localhost",1983);
    		Server S = new Server(1983);
    		C.start();
    		S.start();
    		
    	}
    	
    	
    
    }
    La classe Gestore non l'ho inserita dal momento che sono sicuro al 110% che è implementata bene avendo fatto precedentemente dei test.

  6. #6
    Secondo me il problema sta proprio nel metodo StampaDipendenti potresti postare anche questo ?

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    10
    Originariamente inviato da francesco.muia
    Secondo me il problema sta proprio nel metodo StampaDipendenti potresti postare anche questo ?
    POSTO TUTTO IL PACKAGE GESTORE:


    codice:
    package GESTORE;
    
    
    
    public abstract class Dipendente{
    	
    	protected String Nome;
    	protected String Cognome;
    	public abstract String Stampa();
    	public String getCognome(){return Cognome;}
    
    }
    codice:
    public class Manager extends Dipendente {
    	
    	private Progetto P;
    	private String Nome;
    	private String Cognome;
    	public Manager(String N,String C){
    		Nome = N;
    		Cognome = C;
    				
    	}
    	
    	public void setProgetto(Progetto p){
    		P = p;
    		
    	}
    	
    	public String Stampa() {
    		String tmp="";
    		tmp = tmp + "Nome: " + Nome + "\n";
    		tmp = tmp + "Cognome: "+Cognome + "\n";
    		tmp = tmp + "Ruolo: Manager" + "\n";
    		return tmp;
    	}
    }
    codice:
    public class Programmatore extends Dipendente{
    	
    	private Componente C;
    	private String Nome;
    	private String Cognome;
    	public Programmatore(String N,String Co){
    		Nome = N;
    		Cognome = Co;
    		}
    	public void SetComponente(Componente c){
    		C=c;
    	}
    	
    	
    	public String Stampa(){
    		String tmp="";
    		tmp = tmp + "Nome: " + Nome + "\n";
    		tmp = tmp + "Cognome: "+Cognome + "\n";
    		tmp = tmp + "Ruolo: Programmatore" + "\n";
    		return tmp;
    		
    		
    	}
    	
    	
    
    
    }
    codice:
    public class Componente {
    	
    	private String Nome;
    	private String Linguaggio;
    	public Componente(String N,String L){
    		Nome = N;
    		Linguaggio = L;
    	}
    	public String stampa(){
    		String tmp="";
    		tmp = tmp + "Nome: " + Nome + "\n";
    		tmp = tmp + "Linguaggio: "+ Linguaggio + "\n";
    		return tmp;
    		
    	}
    	
    	
    
    }
    codice:
    import java.util.ArrayList;
    
    
    public class Progetto {
    	private String Nome;
    	private String Descrizione;
    	private ArrayList<Componente> Componenti = new ArrayList<Componente>();
    	public String getNome(){return Nome;}
    	public String getDescrizione(){return Descrizione;}
    	
    	public Progetto(String N,String D){
    		Nome = N;
    		Descrizione = D;
    		}
    	
    	public void setComponente(Componente Comp){
    		Componenti.add(Comp);
    		
    	}
    	
    	public String stampa(){
    		String tmp="";
    		tmp = tmp + "Nome: " + Nome + "\n";
    		tmp = tmp + "Descrizione: "+ Descrizione + "\n";
    		return tmp;
    	}
    	
    	
    	
    	
    	
    	
    
    }
    codice:
    import java.util.ArrayList;
    
    public class Gestore {
    
    	
    	
    	
    	private ArrayList<Dipendente> P = new ArrayList<Dipendente>();
    	
    	private ArrayList<Progetto> Prog = new ArrayList<Progetto>();
    	
    	private ArrayList<Componente> C = new ArrayList<Componente>();
    	
    	public void InserisciManager(String NOME,String COGNOME){
    		Manager M = new Manager(NOME,COGNOME);
    		P.add(M);}
    	
    	public void InserisciProgrammatore(String NOME,String COGNOME){
    		Programmatore Prog = new Programmatore(NOME, COGNOME);
    		P.add(Prog);}
    	
    	public boolean CancellaDipendente(String Cognome){
    		boolean prop = false;
    		int i = 0;
    		while(i<P.size() && prop==false){
    			if(P.get(i).getCognome()==Cognome)
    			{
    				prop = true;
    				P.remove(i);
    				return prop;
    				}
    			else
    				i++;
    			}
    		return prop;
    	}
    	
    	public String StampaDipendenti(){
    		
    		String tmp = "";
    		for(int i=0;i<P.size();i++){
    			tmp = tmp + "\n" + P.get(i).Stampa();
    		}
    		return tmp;
    			
    		}
    		
    	public void InserisciProgetto(String NOME,String DESCRIZIONE){
    		
    		Progetto pr = new Progetto(NOME,DESCRIZIONE);
    		Prog.add(pr);
    	}
    	
    	
    	public void InserisciComponente(String NOME,String LINGUAGGIO){
    		
    		Componente comp = new Componente(NOME, LINGUAGGIO);
    		C.add(comp);	
    		
    	}
    	
    	public boolean CancellaProgetto(String NOME){
    		boolean prop = false;
    		int i = 0;
    		while(i<Prog.size() && prop==false){
    			if(Prog.get(i).getNome()==NOME)
    			{
    				prop = true;
    				Prog.remove(i);
    				return prop;
    				}
    			else
    				i++;
    			}
    		return prop;
    	}
    	
    	public String StampaProgetti(){
    		String tmp = "";
    		for(int i=0;i<Prog.size();i++){
    			tmp = tmp + "\n" + Prog.get(i).stampa();
    		}
    		return tmp;
    			
    		}
    	
    	public void AssociaProgtoStud(String A,String b){
    		
    	}
    	
    	public String StampaComponenti(){
    		String tmp = "";
    		for(int i=0;i<C.size();i++){
    			tmp = tmp + "\n" + C.get(i).stampa();
    		}
    		return tmp;
    			
    		}
    	
    	
    	
    		
    	}
    TI RIPETO SE FACCIO SYSTEM.OUT.PRINTLN(G.STAMPADIPENDENTI()) MI SAMPA EFFETTIVAMENTE CIO' CHE VOGLIO MA IO VORREI CHE LA STRINGA VENGA INVIATA AL CLIENT E LETTA LI.

  8. #8
    Come appunto supponevo dall'inizio il problema sta un pò nel gestore è un pò nel client.
    Quanto stampi di dipendenti tu aggiungi sempre all'inizio il carattere di new line ("\n"),
    Nel client tu leggi una riga solo di quello che il server ti invia cioè proprio il carattere "\n" ecco perchè ti veniva stampato solo questo.
    Un modo per risolvere il problema è cambiare il metodo di lettura nel client in modo da consumare tutto quello che il server gli ha inviato.
    codice:
    String response = null;
    for (response = INPUT.readLine(); response != null; response = INPUT.readLine())
    {
          MESSAGGIORX = response;
          System.out.println("IL SERVER HA INVIATO: " + MESSAGGIORX);
    }
    Ps.
    Un consiglio personale dai un occhiata alla java convention sulla nomenclatura delle classi/metodi/variabile (in futuro lavorativo ti sarà molto utile).

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2012
    Messaggi
    10
    Originariamente inviato da francesco.muia
    Come appunto supponevo dall'inizio il problema sta un pò nel gestore è un pò nel client.
    Quanto stampi di dipendenti tu aggiungi sempre all'inizio il carattere di new line ("\n"),
    Nel client tu leggi una riga solo di quello che il server ti invia cioè proprio il carattere "\n" ecco perchè ti veniva stampato solo questo.
    Un modo per risolvere il problema è cambiare il metodo di lettura nel client in modo da consumare tutto quello che il server gli ha inviato.
    codice:
    String response = null;
    for (response = INPUT.readLine(); response != null; response = INPUT.readLine())
    {
          MESSAGGIORX = response;
          System.out.println("IL SERVER HA INVIATO: " + MESSAGGIORX);
    }
    Ps.
    Un consiglio personale dai un occhiata alla java convention sulla nomenclatura delle classi/metodi/variabile (in futuro lavorativo ti sarà molto utile).
    Grazie mille problema risolto =)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.