Newsgroup: it.comp.java
Titolo: Esecuzione di classi prive del metodo Main

Un saluto ai componenti del ng.
Come da oggetto, vorrei che qualcuno mi spiegasse come fare ad eseguire
classi prive del metodo Main.
Per esemplificare il problema, in fondo a questo messaggio, posto una
piccola classe che restituisce dei particolari valori a partire da un
dato input. Gradirei che potesse essere eseguita con il comando "java"
di modo tale che si possano passare i valori in ingresso direttamente
dalla riga di comando ed avere il risultato nello stesso contesto,
esattamente come accadrebbe con un'applicazione normale.
Grazie a tutti in anticipo!
RS
public class BrokenButtons {
      public int minPresses(int page, int[] broken)
      {
          boolean a[] = new boolean[10];
          for (int i=0; i < broken.length; i++)
               a[broken[i]] = true;
          int ans = Math.abs(page - 100);
          for (int i=0; i <= 1000000; i++)
               if (can(i, a))
                  ans = Math.min(ans, Math.abs(page-1)
                              + Integer.toString(i).length());
          return ans;
     }
     private boolean can (int i, boolean [] a)
     {
          String s = Integer.toString(i);
          for (int j = 0; j < s.length(); j++)
               if (a[s.charAt(j) - '0'])
                   return false;
           return true;
      }
  }

 classi prive del metodo Main.
non la esegui

Hybris ha scritto:

Naaah... so che c'è un modo per farlo. Mi pare si tratti di aggiungerlo
da qualche parte o richiamare la classe da un'altra che implementa il Main.
RS

 da qualche parte o richiamare la classe da un'altra che implementa il Main.
O lo aggiungi nella classe stessa (e quindi non è più una classe priva 
di main), oppure crei un'istanza della tua classe (e quindi non è più 
esecuzione) in un'altra che abbia il main.
In ogni caso, come ti dice Hybris, senza il main non la esegui.
Ciao,
Paolo

 In ogni caso, come ti dice Hybris, senza il main non la esegui.
Questo lo so pure io, l'ho anche scritto. Ma come ho specificato a
Hybris (che in greco significa "tracotanza" :-) ) cercavo un modo per
"far funzionare" (va bene così?) la classe di modo che si potesse
comunque ottenerne l'output. Chiedo scusa per l'imprecisione di
linguaggio, non sono un programmatore, ma ero convinto che fosse chiaro
il mio intento.
Grazie ancora.
RS

 non sono un programmatore
ah beh allora cambia tutto :). benvenuto sul gruppo.
public class BrokenButtons {
	public static void main(String args[]) {
		BrokenButtons bb = new BrokenButtons();
		//questi valori vanno impostati a uqalcosa che abbia senso
		int page = 1;
		int broken[] = {1,2,3,4,5,6};
		int resp = bb.minPresses(page, broken);
		System.out.println(resp);


 ah beh allora cambia tutto :). benvenuto sul gruppo.
E tu gli fai pure il compitino per casa? Guarda che se lo sa, il prof si 
incavola! ;)))

 incavola! ;)))
non sa cos'e' il main, non sa istanziare una classe... non posso credere
che sia uno studente.

 		System.out.println(resp);
E qui stampi sullo standard output il risultato del metodo "resp", che è
poi quello che di fatto esegue i calcoli.
Segue il resto del codice inalterato.
Grazie ancora!
RS

 incavola! ;)))
Sono uno studente di fisica, noi non facciamo programmazione. Non ci
vengono assegnati compitini per casa e, per fortuna, non si incavola
nessuno se certe cose non le sappiamo fare ;-)...
Solo stavo cercando di imparare. Ho comprato un libro (Java 1.1, SAMS
Publishing), un volumone a carattere antologico che spiega veramente
tutto di Java. Solo che ha il tremendo difetto di dare per scontata la
programmazione orientata agli oggetti, per questo sto arrancando tanto
per capire come si istanzia una classe e a cosa serve l'operatore dot.
Adesso cercherò di trovare del materiale in rete su quest'ultimo argomento.
Saluti,
RS

 sommariamente, il significato dell'operatore dot (bb.minPresses)?
eseguo il metono minPresses dell'oggetto bb che e' una istanza della
classe BrokenButtons

 Adesso cercherò di trovare del materiale in rete su quest'ultimo argomento.
tratta java 1.1, roba vecchia di svariati anni fa. siamo a 1.6.
ti consiglio di iniziare con un po' di basi di programmazione ad oggetti
Thinking in Java, 3rd Edition 
si trova la versione elettronica gratuita. i capitoli iniziali coprono le
basi di programmazione ad oggetti.

 classe BrokenButtons
Grazie, adesso è abbastanza più chiaro. Nel frattempo mi è sorta
un'altra curiosità: come mai il blocco del main lo chiudi prima del
blocco "private boolean can (int i, boolean [] a) {"?
Ho notato che l'output prodotto dal programma è diverso a seconda che
questo ultimo blocco venga incluso o meno (quindi ne deduco che
anch'esso ha una parte nella determinazione del risultato).
Grazie.
RS

 classi prive del metodo Main.
prima bisognerebbe tu spiegassi cosa intendi per "eseguire classi".

 prima bisognerebbe tu spiegassi cosa intendi per "eseguire classi".
:'-(
RS

 Grazie, adesso è abbastanza più chiaro. Nel frattempo mi è sorta
sinceramente non capisco quali prove tu stia cercando di fare e perche',
ti consiglio di fare un passo indietro e di ricominciare dalle basi. cosi'
ti stai solo impantanando sempre di piu'.
la programmazione ad oggetti e java non sono cose che puoi imparare in
pochi giorni con due domande su un newsgroup.

 :'-(
è così.
il codice eseguibile di una classe java può essere in un metodo, in un 
costruttore o in un blocco di inizializzazione, i quali (a parte i 
costruttori) possono essere statici e non.
i blocchi di inizializzazione statici vengono invocati quando la classe 
viene caricata dal classloader, quelli non statici quando ne viene 
creata una istanza.
i costruttori vengono invocati anch'essi alla creazione dell'istanza 
secondo determinate regole.
i metodi vengono invocati esplicitamente da qualcuno e sono relativi ad 
un istanza concreta. i metodi statici invece non hanno bisogno di una 
istanza concreta.
come vedi dire "eseguire una classe" non significa assolutamente nulla.

 come vedi dire "eseguire una classe" non significa assolutamente nulla.
Aggiungo un "precisazione pedante".
"Eseguire una classe" ha un significato in realtà: eseguirne il metodo main.
Ma se la classe non ha un metodo main allora si, non significa 
assolutamente nulla.
Andrea


Ho già detto che non sono un programmatore e sto imparando da quasi
zero: non mi serve pedanteria. Voi qui rispondete solo a gente già esperta?
RS

 Voi qui rispondete solo a gente già esperta?
Guarda che di risposte te ne sono già state date, quindi penso che a 
questo punto avrai risolto il problema originale e insistere su quello 
sarebbe una duplicazione.
Ti è stato anche dato qualche ottimo consiglio su come iniziare (il 
bellissimo e gratuito Thinking in Java ad esempio) che non posso che 
sottoscrivere.
Posso anche confermare (ed è un suggerimento, bada bene, non una 
critica) che il newsgroup può essere utile per risolvere alcuni punti 
poco chiari, ma che per iniziare è molto più utile una guida come il 
libro di cui sopra, o quantomeno il tutoria della sun 
(
http://java.sun.com/docs/books/tutorial/
).
Andrea