Vai al contenuto

Primi passi java, chiedo aiuto


maruzzo

Messaggi raccomandati

Allora ragazzi sto tenendo il mio primo corso di java all'università.

Il mio problema è un professore win fissato e poco aperto a spiegare per bene le cose agli alunni…

Mi spiego meglio, ci ha iniziato a dire dovete scrivere questo e questo…alla fatidica domanda "ma a che servono tutte ste scritte?" lui risponde semplicemente con "voi fate cosi e basta".

Inutile dire che un tizio del genere non può che essere un win dipendente…ha dato dei cd con vari tools ecc…solo che io ho un mac e non ho voglia di installare bootcamp per fare cose che potrei fare tranquillamente con il mio mac…

allora ecco quello che lui ci ha detto di scrivere:

import java.until.*;
public class prova {
public static void main (String[]args){

System.out.print("questa e' una prova");

}
} 

questo codice dovrebb stamparmi una pagina con scritto "questo e' una prova" solo che quando lo vado a compilare mi da questo errore

prova.java:1: package java.until does not exist

import java.until.*;

^

1 error

da qui penso che nei cd che ha dato agli altri colleghi ci fossero questi package java.until…ho fatto delle ricerche ma non sono riuscito a trovare niente…ragazzi sono nelle vostre mani:cry:

Link al commento
Condividi su altri siti

:love::saltella: :saltella:

Ho un'altro probelmino.

Allora ho sviluppato un piccolo script che mi permette di calcolare la potenza di un numero…funziona tutto correttamente.Quando però ho voluto perfezionare lo script per calcolare il risultato quando l'esponente è zero (qualsiasi numero elevato a zero fa uno) mi trova un errore sull'uso delle variabili booleniane…ecco quello che ho scritto

/* codice standard */
import java.util.*; 

/* attenzione al posto di esponente bisogna mettere il nome del documento */
public class esponente {
public static void main (String[]args){


/*Da quà in avanti si inseriscono dati tramite console */
Scanner console=new Scanner (System.in);

System.out.print("Inserisci il valore ddella base ===> base= ");

/* Inserimento vero e proprio di base */
int base=console.nextInt();

/* Si scrive una stringa per inserire il valore dell'esponente da notare non si usa println in modo da concatenare
la stringa all'inserimento vero e proprio */
System.out.print("Inserisci il valore di esponente ===> esponente= ");

boolean verifica esponente=0;

/* Inserimento vero e proprio dell'esponente */
int esponente=console.nextInt();

if(verifica=true)  {

System.out.print(base+"^"+esponente+"=0");
                  }
else          {



int potenza= base;                  // si può anche scrivere
int contatore=1;                   //come int potenza= base , contatore=1;


while(contatore>0){                //inizia il while



potenza=potenza*base;             // si può scrivere anche come potenza*=base;
contatore=contatore-1 ;



}

//stampa il risultato
System.out.println(base+"^"+esponente+"="+potenza);

             }

}
}

L'errore credo che sia proprio in

boolean verifica esponente=0;

solo che non capisco cosa ci sia di sbagliato :saltella:

btw l'errore che mi da è

esponente.java:25: ';' expected

boolean verifica esponente=0;

^

1 error

Inizialmente volevo semplicemente usare un

if(esponente=0)

solo che mi dava un errore dove diceva che dovevo usare i booleniani…cosi ho fatto ma ancora non ho risolto:baby:

Link al commento
Condividi su altri siti

per l'uguaglianza devi usare ==

if (esponente==0)

il singolo = è una assegnazione, con esponente=0 assegni il valore 0 alla variabile esponente

Chi è lei? Il numero 2. Chi è il numero 1? Lei è il numero 6.

Link al commento
Condividi su altri siti

Grazie mille ho risolto :love:

se interessasse a qualcuno ecco il sorgente intero

/* codice standard */
import java.util.*; 

/* attenzione al posto di esponente bisogna mettere il nome del documento */
public class esponente {
public static void main (String[]args){


/*Da quà in avanti si inseriscono dati tramite console */
Scanner console=new Scanner (System.in);

System.out.print("Inserisci il valore ddella base ===> base= ");

/* Inserimento vero e proprio di base */
int base=console.nextInt();

/* Si scrive una stringa per inserire il valore dell'esponente da notare non si usa println in modo da concatenare
la stringa all'inserimento vero e proprio */
System.out.print("Inserisci il valore di esponente ===> esponente= ");


/* Inserimento vero e proprio dell'esponente */
int esponente=console.nextInt();

if(esponente==0)  {

System.out.println(base+"^"+esponente+"=0");
                  }
else          { 



int potenza=1, contatore=esponente;      
while(contatore>0){                //inizia il while



potenza*=base;           // si può scrivere anche come potenza*=base;
contatore=contatore-1;



}

//stampa il risultato
System.out.println(base+"^"+esponente+"="+potenza);

             }

}
}

grazie ancota :saltella:

Link al commento
Condividi su altri siti

grazie:D

Un'altra cosina altrettanto semplice

Per inserire una variabile di tipo int tramite console disolito uso:

Scanner console=new Scanner(System.in);
int a=console.nextInt();

Ora ho la necessità di inserire tramite console una variabile non numerica…ma una frase, delle lettere…devo usare le variabili di tipo char giusto?

solo che quando scrivo

Scanner console=new Scanner(System.in);
char a=console.nextInt();

Non funziona…cosi ho provato a scrivere:

Scanner console=new Scanner(System.in);
char a=console.nextChar();

Ma non funge nemmeno:cry:

Link al commento
Condividi su altri siti

leggi un pò qua

http://java.sun.com/j2se/1.5.0/docs/api/

Il char però è una variabile che identifica un singolo carattere, non una stringa.

Non ho mai usato Scanner, ma leggendo la documentazione delle api suppongo che tu debba usare...

String s=console.next();

...per ottenere la successiva "parola" in formato stringa.

Nelle API cerca Scanner. Nella sezione iniziale c'è qualche esempio.

Chi è lei? Il numero 2. Chi è il numero 1? Lei è il numero 6.

Link al commento
Condividi su altri siti

Da quello che ho capito per inserire una stringa tramite console devo usare

String scelta=console.next();

ma poi come faccio a confrontare la variabile scelta con un'altra variabile?

Mi spiego meglio, dovrei prima dichiarare e inizializzare una variabile di contronto, a cui però dovrei attribuire una serie di lettere, e poi confrontarla con la variabile inserita tramite console.

Ora la domanda è: come faccio ad attribure ad una variabile una serie di lettere? il tipo char, come hai detto tu, permette l'inserimento di una sola lettera…cosi a senso avevo provato a usare il tipo string, che però non mi riconosce e suppongo non esista proprio.

Ho dato un occhiata a il link che mi hai postato però non ho trovato niente.

Vorrei solo sapere come definire una variabile con una serie di lettere:fiorellino:

In php è tutto molto più semplice, $ variabile e via:p

Link al commento
Condividi su altri siti

non sono sicuro di avere capito, cosa intenti per "Vorrei solo sapere come definire una variabile con una serie di lettere"?

Esempi (alternativi che fanno la stessa cosa):

String variabileA = "ciao";

String variabileA = new String("ciao");

così creai variabileA e gli assegni il valore "ciao".

se poi hai

String variabileB = console.next();

e vuoi verificare che variabileA sia uguale a variabileB fai

if (variabileA.equals(variabileB)) {

...

}

una variabile di tipo String è un oggetto, non è una variabile di tipo primitivo, come int, char ecc, per cui non devi fare

if (variabileA==variabileB) {

...

}

ma usare i metodi dell'oggetto String

nel link sopra, se cerchi String nell'elenco a sinistra ottieni la specifica della classe e tutti (tanti) i suoi metodi.

ti consiglio di seguire i tutorial per imparare

http://java.sun.com/docs/books/tutorial/

Getting Started, Learning the Java Language e poi gli altri

Chi è lei? Il numero 2. Chi è il numero 1? Lei è il numero 6.

Link al commento
Condividi su altri siti

Hai ragione non mi sono espresso bene, anche se hai centrato in pieno il problema:fiorellino:

Io cercavo di dichiarare la variabile scrivendo

String variabilea=prova;

invece ora ho capito che la cosa è differente perchè non è una variabile primitiva, non so davvero come ringraziarti mi sei stato utilissimo.

Il fatto è che sto seguendo un corso all'università dove ora stiamo facendo le cose più elementari, io invece sono andato molto avanti per curiosità e sto ottenendo risultati discreti :DD:saltella:

Comunque grazie ancora, gentilissimo :D

Link al commento
Condividi su altri siti

comunque se potesse interessare tutti questi consigli mi sono serviti per fare

//codice standard
import java.util.*;
public class app {
public static void main (String[]args){

//Dati tramite console
Scanner console=new Scanner(System.in);

//servirà più avanti per controllare il ciclo
boolean devocontinuare=true;

//***IMPORTANTISSIMO***\\
//cosi si crea una variabile verifica e gli si assegna il valore "quit"  
//si definiscono le variabili di confronto              
String verifica = "quit"; 
String verifica2="potenza"; 
String verifica3="converter";  
String verifica4="somma";   
String verifica5="divisione"; 
String verifica6="countdown";                  

//stampa una stringa di benvenuto
System.out.println("APPLICAZIONE APERTA");

//inizia il ciclo
while(devocontinuare==true){

//lista degli algoritmi risolvibili dall'applicazione
System.out.println("Ora scegli quello che vuoi fare, questa app ti permette di:");
System.out.println("-Calcolare la potenza di un numero              Code= potenza");
System.out.println("-Convertire lire in euro                        Code= converter");
System.out.println("-Sommare due numeri                             Code= somma ");
System.out.println("-Dividere due numeri                            Code= divisione");
System.out.println("_Countdown di un numero                         Code=countdown");
System.out.println("-Per chiudere l'applicazione                    Code=quit");
System.out.print("Digita il codice di quello che vuoi fare ");
//scelta tramite console di cosa fare
String scelta=console.next();





//se scelta è uguale a verifica allora il ciclo termina.
//da notare che quando due variabili non sono priimitive per
//usare if e confrontare si usa if(variabileA.equals(variabileB))
if(scelta.equals(verifica)){                       

//devo continuare assume il valore false
devocontinuare=false;
System.out.println("APPLICAZIONE CHIUSA");
						}//<=== /if  QUIT





//invece se si digita un comando diverso da quit
//INIZIA LO SCRIPT POTENZA		   
else {
if(scelta.equals(verifica2)){

System.out.print("Inserisci il valore ddella base ===> base= ");

/* Inserimento vero e proprio di base */
int base=console.nextInt();

/* Si scrive una stringa per inserire il valore dell'esponente da notare non si usa println in modo da concatenare
la stringa all'inserimento vero e proprio */
System.out.print("Inserisci il valore di esponente ===> esponente= ");


/* Inserimento vero e proprio dell'esponente */
int esponente=console.nextInt();

//se l'esponente è uguale a zero allora il risultato è sempre uguale a 1
if(esponente==0)  {

System.out.println(base+"^"+esponente+"=1");
                  }

//se invece l'esponente è !=0 lo script ricomincia direttamente da quà				   
else          { 

//si definiscono le variabili contatore e potenza
int potenza=1, contatore=esponente;  

//inizia il ciclo    
while(contatore>0)
                  {                
potenza=potenza*base;          // si può anche scrivere potenza*=base ; la cosa è equivalente  
contatore=contatore-1;
                  }

//stampa il risultato
System.out.println(base+"^"+esponente+"="+potenza); 

}                     
					 }//<=== /if POTENZA





//CONVERTITORE					 
if(scelta.equals(verifica3)){ 

//Un euro vale 1936.27 lire
double coefficente=1936.27;

System.out.print("Inserisci le lire da convertire ===> ");
long lire=console.nextInt();

double euro=lire/coefficente;

System.out.println(lire+" lire "+" corrispondono a "+euro+" euro");
                                 }//<=== /if CONVERTITORE	




//SE LA SCLETA è UGUALE SOMMA INIZIA LO SCRIPT SOMMA
if(scelta.equals(verifica4)){

//si definisce la variabile devocontinuare
boolean devocontinuare1=true;

//variabile che poi verrà incrementata nel ciclo
int somma=0;

//inizia il ciclo
while(devocontinuare1==true){

//Nel ciclo si inseriranno dei numeri tramite console fino a quando devocontinuare varrà true
System.out.print("Inserisci un numero da sommare ===>  ");
int numero=console.nextInt();

//ora se il numero inserito è maggiore di 0
if(numero>0) {

//il valore di somma verrà incrementato di un valore uguale al numero inserito tramite console (numero)
//inizialmente questa variabile vale 0
somma=somma+numero;
             }  // <== /if

//se invece il numero insierto è minore o uguale a 0			  
else if(numero<=0) {

//la variabile devocontinuare assume il valore 0 ponendo fine al ciclo 
devocontinuare1=false;
                    } //<== /else if	

                        }//<== /while

//stampa la somma tra tutti i numeri inseriti						 
System.out.println("La somma di questi numeri e' "+somma);		

                            }//<=== /IF SOMMA	




//DIVISIONE
if(scelta.equals(verifica5)){
//inserimento del dividendo
System.out.print("Inserisci il dividendo = ");
int dividendo=console.nextInt();

//inserimento del divisore
System.out.print("Inserisci il divisore = ");
int divisore=console.nextInt();

//calcola il risultato
int r= dividendo/divisore;

//stampa risultato
System.out.println(dividendo+"/"+divisore+"="+r);

//risultato virgola
int rv=dividendo%divisore;

// stampa risultato 2

System.out.println(dividendo+"%"+divisore+"="+rv);

//conclusione

System.out.println("In conclusione "+dividendo+" diviso "+divisore+" = "+r+" col resto di "+rv);
                            }//<=== /DIVISIONE





//COUNTDOWN
if(scelta.equals(verifica6)){

//per inserire il numero da countdownare
System.out.print("Inserisci un numero ===> ");
int a=console.nextInt();

//si definisce un contatore, inizialmente con il valore
//della variabile a
int contatore=a;

//Inizia il ciclo fin tanto il contatore è
//maggiore o uguale a 0
while(contatore>=0){

//stampa il valore di contatore, ad ogni ciclo viene diminuito di uno
System.out.println(contatore);

//decremente il contatore di uno
contatore=contatore-1;

                    }//<=== /while

                            }//<=== COUNTDOWN						 

						 		}//<==/else 			   


                           }//<=== /while			 

										   }//<=== /main
				}//<=== /class					   

Il codice forse non è ordinatissimo però funge tutto perfettamente magari può essere utile:ciao:

Link al commento
Condividi su altri siti

  • 4 settimane dopo...

Sto cercando di creare uno programma divertente per indovinare un numero generato a caso. Solo che arrivato ad un certo punto non va e mi da un errore.

Ecco il codice:

//codice standard
import java.util.*;
public class finder {
 public static void main(String[]args){

//dati tramite console
 Scanner console=new Scanner(System.in);

 //Mi da un numero casuale tra tra 0 e 1
 double x0=Math.random();

 //trasforma x0 in un numero compreso tra 0 e 100
 double x1=x0*100;

 //approssima per eccesso x1
 long x= Math.round(x1);

 int tentativi=0;

 long n;

  System.out.print("Indovina il numero compreso nell'internallo [0;100] \n n= ");

 do {

    tentativi++;
 n=console.nextLong();
  if (n>=0 && n<=100) {
  if(n>x){
   System.out.println("Il numero inserito e' troppo grande");
          }
   else if(n<x){
   System.out.println("Il numero inserito e' troppo piccolo, inseriscine un'altro");	 
                }
				      }
	else if(n>00 || n<0){
	 System.out.println("Il numero deve essere compreso nell'intervallo [0;100]");
						}

	} while(n!=x)	;		  


System.out.println("Hai indovito il numero in "+tentativi+" tentativi");

//IMPORTANTISSIMO:
//richiamo una funzione esterna
Stampavoto(tentativi);	



} //====> /main




//codice standard per un'ulteriore funzione esterna
public static void stampavoto(int tentativi) {

switch(tentativi) {

case 1: System.out.println("Ottimo"); break;
case 2: System.out.println("Ottimo"); break;
case 3: System.out.println("Ottimo"); break;
case 4: System.out.println("Sufficiente"); break;
case 5: System.out.println("Sufficiente"); break;
case 6: System.out.println("Sufficiente"); break;
case 7: System.out.println("Sufficiente"); break;
case 8: System.out.println("Sufficiente"); break;

//se tentativi non assume un valore da 1 a 8 allora assume il valore dafault
default: System.out.println("scarso");

                  } // ===> /swicth

			                              }// ===> /stampavoto 

			   }// ====> /public							  							  





L'errore dovrebbe essere nel richiamare la seconda funzione:

Stampavoto(tentativi);	



} //====> /main




//codice standard per un'ulteriore funzione esterna
public static void stampavoto(int tentativi) {

switch(tentativi) {

case 1: System.out.println("Ottimo"); break;
case 2: System.out.println("Ottimo"); break;
case 3: System.out.println("Ottimo"); break;
case 4: System.out.println("Sufficiente"); break;
case 5: System.out.println("Sufficiente"); break;
case 6: System.out.println("Sufficiente"); break;
case 7: System.out.println("Sufficiente"); break;
case 8: System.out.println("Sufficiente"); break;

//se tentativi non assume un valore da 1 a 8 allora assume il valore dafault
default: System.out.println("scarso");

                  } // ===> /swicth

			                              }// ===> /stampavoto 

			   }// ====> /public				

Qualche anima mi darebbe una mano?

Link al commento
Condividi su altri siti

Dal codice sopra vedo che la funzione "stampavoto" è definita con la s minuscola, nel chiamarla usi la S maiuscola.

Java è case-sensitive. Le funzioni per convenzione iniziano con la minuscola. Prova a modificare la chiamata usando la s minuscola.

Chi è lei? Il numero 2. Chi è il numero 1? Lei è il numero 6.

Link al commento
Condividi su altri siti

  • 4 settimane dopo...

Fra qualche giorno avrò l'esame di java solo che ho ancora qualche dubbio.

Il mio dubbio principale e sul return e sulle matrici. Iniziamo con il return.

questa è la traccia di un vecchio appello:

public class Esercizio1A{
public static int prodotto(boolean[] prodotto, int[] interi)
{	
int risultato = 1;
if (prodotto.length != interi.length)
return risultato;
for (int i = 0; i < prodotto.length; i++)
	{     if (!prodotto[i])
		   risultato *= interi[i];
	}
	return risultato;
}

	public static void main(String args[]){
		int[] V = {-5,  128,  56,  15,  -6,  12,  -3 };
		boolean[] X = {true,  false,  false,  true,  true,  false,  true };
		System.out.println(“RISULTATO: “ + prodotto(X, V));
   }
}

Tutto chiaro fino a quando si usa il return :ciao: Non ho ancora capito a cosa serve esattamente e anche cercando su internet non ho trovato niente:baby:

lele mi daresti una manina?:fiorellino: Tanto fra una settimana do l'esame e poi non romperò più le scatole a nessuno :baby:

Link al commento
Condividi su altri siti

cos'è che non ti torna? nella classe hai messo un metodo statico che deve ritornare un int

public static int prodotto...

il return serve per restituire il risultato della funzione, all'interno della funzione lo usi due volte: la prima per restituire 1 nel caso i due array non abbiano la stessa dimensione, perchè in tal caso il ciclo for seccessivo potrebbe generare una exception, con questo primo return interrompi l'esecuzione del metodo restituendo 1, il secondo, successivo al ciclo for, restituisce il dato calcolato.

Chi è lei? Il numero 2. Chi è il numero 1? Lei è il numero 6.

Link al commento
Condividi su altri siti

La cosa che non mi torna sono gli if e i for senza le parentesi graffe. In questo caso non c'è bisogno di metterle sempre :

public class Esercizio1A{

public static int prodotto(boolean[] prodotto, int[] interi)

{

int risultato = 1;

if (prodotto.length != interi.length)

return risultato;

for (int i = 0; i < prodotto.length; i++)

{ if (!prodotto)

risultato *= interi;

}

return risultato;

}

public static void main(String args[]){

int[] V = {-5, 128, 56, 15, -6, 12, -3 };

boolean[] X = {true, false, false, true, true, false, true };

System.out.println(“RISULTATO: “ + prodotto(X, V));

}

}

Se volessi scrivere

if (prodotto.length != interi.length)

return risultato;

for (int i = 0; i < prodotto.length; i++)

{ if (!prodotto)

risultato *= interi;

}

return risultato;

questo passo usando le parentesi lo dovrei scrivere cosi:

if (prodotto.length != interi.length){

return risultato;

}

for (int i = 0; i < prodotto.length; i++){

{ if (!prodotto)

risultato *= interi;

}

}

return risultato;

???

la cosa che non mi torna è la posizione del return :love:

PS

grazie mille lele gentilissimo come sempre:cry:

Link al commento
Condividi su altri siti

se non metti le graffe l'istruzione if o for gestisce la singola istruzione successiva, io preferisco metterle sempre

perchè non ti torna la posizione del return? quale dei due?

Chi è lei? Il numero 2. Chi è il numero 1? Lei è il numero 6.

Link al commento
Condividi su altri siti

Non è che non mi tornano ma non ne sono sicuro.

Tenendo presente il mio codice scrivere questo passo con le parentesi è corretto? :

if (prodotto.length != interi.length){

return risultato;

}

for (int i = 0; i < prodotto.length; i++){

{ if (!prodotto)

risultato *= interi;

}

}

return risultato;

Vorrei essere sicuro di aver capito bene dove posizionare i vari return anche quando si usano le parentesi perchhè, come hai detto anche tu, è sempre meglio usarle per evitare confusione.

Per esempio il secondo return l'ho messo fuori dal for. E' corretto?

Mentre nel primo caso (il primo if di questo passo) l'ho messo dentro l'if

Link al commento
Condividi su altri siti

c'è comunque un errore: sul secondo if hai sbagliato l'apertura della graffa (l'hai messa prima)

if (prodotto.length != interi.length){
 return risultato;
}

for (int i = 0; i < prodotto.length; i++) {
 // { if (!prodotto[i]) -- tu hai scritto così, mentre devi metterlo come sotto
 if (!prodotto[i]) {
   risultato *= interi[i];
 }
}
return risultato;

il secondo return è fuori dal ciclo perchè solo al termine del ciclo hai finito il calcolo, forse ti stai confondendo.. finito il ciclo for l'esecuzione del metodo prosegue con l'istruzione successiva.

Chi è lei? Il numero 2. Chi è il numero 1? Lei è il numero 6.

Link al commento
Condividi su altri siti

la graffa prima dell'if è un errore di distrazione :P

Per il resto ora ho la situazione più chiara. grazie ancora. Ho anche un'altro problemino che forse riesco a risolvere da solo, in caso contrario stasera lo posto quà visto che giovedi ho l'esame :P

Grazie ancora una volta:ciao:

Link al commento
Condividi su altri siti

  • 4 settimane dopo...

sn anke io un principiante di java e volevo chiedere delle informazioni in merito all'utilizzo di metodi che danno in output un boolean....il mio dubbio riguarda il fatto che spesso vengono chieste che delle condizioni siano verificate per ogni componente di un array per esempio...in qst caso conviene impostare un If con le condizioni inverse cn un return false??? in modo che alla prima condizione che verifica l'if inverso il mio metodo restituisce false...mentre se nn entra nell if (e quindi le condizioni iniziali risultano verificate) "ritorna" true...il mio ragionamento è esatto?? posso applicarlo sempre??? dove sbaglio???

grazie anticipatamente

Link al commento
Condividi su altri siti

spiego meglio....devo per esempio verificare la simmetria di una matrica...

public static boolean matriceSimmetrica(int || || m){

for (int i=0; i<m.length; i++)

for (int j=i+1; i<m|0|.length; j++)

if(m|i||j| !=m|j|i|)

return false;

return true;

}

come vedete ho utilizzato un if "al contrario", visto che la simmetria deve essere verificata per più elementi...quindi se nn entra nell if...ho simmetria e ritorna true...credo che il mio ragionamento sia giusto...mi interessava però sapere se qst uso dell if "al contrario" va utilizzato ogni qual volta ho bisogno che una determinata condizione sia verificata piu volte o ci sono altre possibili applicazioni???

se avessi voluto inizializzare una variabile per esempio

boolean simmetrica=false;

che avrei trasformato in true qualora la matrice fosse stata simmetrica...per poi ovviamente fare

return simmetrica;

come avrei dovuto impostare il mio metodo'??

grazie in anticipo e scusate per la banalità dei miei quesiti ma conosco java solo da un mese....

Link al commento
Condividi su altri siti

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...