PDA

View Full Version : [Java] Problema


darkmax
23-09-2008, 15:27
cod=cog.charAt(0) +cog.charAt(1)+ cog.charAt(2) +n.charAt(0)+ n.charAt(1) +n.charAt(2);
utente1.setcod(cod);
System.out.println("Registrazione effettuata");
System.out.println("Il codice di sicurezza e' :"+ cod);



Perchè mi da sbagliato il codice in rosso?

banryu79
23-09-2008, 15:51
Perchè l'operatore di somma tra char da come risultato un tipo int, e tu invece vuoi ottenere una String.

L'operatore "+" è particolare solo tra oggetti String: in quel caso funziona come un'append tra le Stringhe.

yggdrasil
23-09-2008, 15:54
quello che ti è stato detto è vero ma basterebbe rendere la parte destra dell'espressione una stringa concatenando il tutto ad una stringa vuota


blabla= car1 + car2 + eccecc
in
blabla = "" + car1 + car2 + eccecc

darkmax
23-09-2008, 17:34
quello che ti è stato detto è vero ma basterebbe rendere la parte destra dell'espressione una stringa concatenando il tutto ad una stringa vuota


blabla= car1 + car2 + eccecc
in
blabla = "" + car1 + car2 + eccecc

Grazie.. altra domanda..
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*si crei classe conto corrente k contiene 3 metodi (oltre al main) un metodo
prelievo una versamento e uno get saldo
il metodo prelievo calcola il saldo dopo un prelievo
il metodo versamento aggiorna il saldo dopo un versamento
il metodo getsaldo aggiorna il saldo.
Nel metodo main dobbiamo creare una sorta di acqusizione interattiva di dati in input.
esempio:k operazione vuoi fare?(p/v/s)*/

package contocorrente;

/**
*
* @author internet
*/
import java.util.Scanner;

public class Contocorrente {
private static String nome;
private static String cognome;
private static int saldo;
private int codice;
/**
* @param args the command line arguments
*/


//eliminato lo static
void setnome(String nom){
nome=nom;
}
public void setcodice(int cod){
codice=cod;
}

public static void setcognome(String cogn){
cognome=cogn;
}
//eliminato lo static
void setsaldo (int sald){
saldo=100;
}
public static String getnome(){
return nome;
}
public int getcod(){
return codice;
}

public static String getcognome(){
return cognome;
}
public static int getsaldo(){
return saldo;
}

public static double prelievo (int prelievo, int versamento, Scanner input){

//inserisco la somma da prelevare e controllo che sia disponibile
//sul conto
do {
System.out.println("inserire la somma che si vuole prelevare");
prelievo=input.nextInt();
} while (prelievo>saldo);
saldo=saldo-prelievo;
System.out.println("il saldo momentaneamente disponibile è "+saldo);
return saldo;
}

public static double versamento (int prelievo, int versamento, Scanner input){

//prendo in input la somma da versare e aggiorno il saldo
System.out.println("inserire la somma che si vuole versare");
versamento=input.nextInt();

saldo=saldo+versamento;
System.out.println("il saldo momentaneamente disponibile è "+saldo);
return saldo;

}
public static double bonifico (Scanner input){
System.out.println("inserire la somma da versare sull'altro conto");
int som=input.nextInt();
saldo=saldo-som;
return saldo;
}

public static void main(String[] args) {
// TODO code application logic here
Scanner input=new Scanner(System.in);
Scanner input_s=new Scanner(System.in);
Contocorrente utente=new Contocorrente();
Contocorrente utente2=new Contocorrente();

//inserito nuovo scanner per r2
Scanner input2=new Scanner (System.in);

//dichiarazione variabili
int t=0;
int prelievo=0;
int versamento=0;
String risp; //per decidere quale operazione fare
boolean r2; //per fare un'altra operazione sul conto
int c=0; //variabile che utilizzo per il controllo del codice utente




//inserimento dati del primo utente
System.out.println("inserire i dati dell'utente 1");
System.out.println("inserire il nome");
String nom=input_s.nextLine();
utente.setnome(nom);
System.out.println("inserire il cognome");
String cogn=input_s.nextLine();
utente.setnome(cogn);
//aggiunto sald tra parentesi e dichiarato
int sald=0;
utente.setsaldo(sald);
System.out.println("inserire il codice di sicurezza");
int cod=input.nextInt();
utente.setcodice(cod);

//inserimento dati del secondo utente
System.out.println("inserire i dati dell'utente 2");
System.out.println("inserire il nome");
nom=input_s.nextLine();
utente2.setnome(nom);
System.out.println("inserire il cognome");
cogn=input_s.nextLine();
utente2.setnome(cogn);
System.out.println("inserire il codice di sicurezza");
cod=input.nextInt();
utente2.setcodice(cod);

sald=0;
utente2.setsaldo(sald);

//controllo utente
System.out.println("inserire utente o utente2");
String tipo=input.nextLine();

for (int i=0;i<3;i++){
System.out.println("massimo tre tentativi. tentativo n "+i);
System.out.println("inserire il codice di sicurezza");
c=input.nextInt();
if (tipo.equals("utente")){
if (c!=utente.codice) System.out.println("codice errato");
}
else if (c!=utente2.codice) System.out.println("codice errato");
}
t=utente.getcod();
if (t==c){
utente.getsaldo();
}else{
utente2.getsaldo();
}

//richiedo quale operazione si vuole effettuare
do{

System.out.println("quale operazione si vuole effettuare?");
System.out.println("p=prelievo v=versamento b=bonifico s=saldo");
risp=input.nextLine();

if (risp.equals("p")) prelievo( prelievo,versamento,input);
if (risp.equals("v")) versamento( prelievo,versamento,input);
//Aggiunto output per operazione s
if (risp.equals("s")) System.out.println("Saldo: " +getsaldo());
if (risp.equals("b")) bonifico(input);

System.out.println("si vuole effettuare un'altra operazione?");
System.out.println("inserire true o false");
r2=input2.nextBoolean();


} while (r2==true);
}
}




Perchè non posso mettere la variabile private codice e il metodo setcodice static sennò mi da utente e utente2 sottolineati di giallo?

banryu79
23-09-2008, 17:47
Un consiglio darkmax: quanto posti del codice, per favore racchiudilo tra i tag CODE non i tag QUOTE. I tag CODE sono fatti apposta per pubblicare codice senza perdere l'identazione.
Inoltre potrebbe essere più chiaro postare solo il pezzo di codice relativo alla richiesta di aiuto del momento invece che tutta una classe/file. In questo modo chi legge il tuo post è meno scoraggiato dalla prospettiva di una lunga lettura.

darkmax
24-09-2008, 15:25
package biblioteca;

/**
*
* @author internet
*/

import java.util.Scanner;
import java.lang.Math;


public class Biblioteca {

private String cod_libro;
private String titolo;
private int anno;
private String genere;
private String nome_socio;
private String cognome_socio;


public static void SetCod(String cod,Biblioteca c){
c.cod_libro=cod;
}

public static void SetTitolo(String lib,Biblioteca c){
c.titolo=lib;
}

public static void SetGenere(String gen,Biblioteca c){
c.genere=gen;
}
public static void SetNomeSocio(String nom,Biblioteca c){
c.nome_socio=nom;
}

public static void SetCognomeSocio(String cog,Biblioteca c){
c.cognome_socio=cog;
}

public static void SetAnno(int a,Biblioteca c){
c.anno=a;
}


public static String GetCod(Biblioteca c){
return c.cod_libro;
}

public static String GetTitolo(Biblioteca c){
return c.titolo;
}

public static String GetGenere(Biblioteca c){
return c.genere;
}
public static String GetNomeSocio(Biblioteca c){
return c.nome_socio;
}

public static String GetCognomeSocio(Biblioteca c){
return c.cognome_socio;
}


public static void CaricaLibro(Biblioteca [] libro){
int i;
String c;
Scanner dati=new Scanner(System.in);
for(i=0;i<libro.length;i++){
System.out.println("Inserisci il codice del libro: ");
c=dati.nextLine();
SetCod(c,libro[i]);
System.out.println("Inserisci il titolo del libro: ");
SetTitolo(dati.nextLine(),libro[i]);
System.out.println("Inserisci il genere del libro: ");
SetGenere(dati.nextLine(),libro[i]);
System.out.println("Inserisci il nome dell'utente che ha in prestito: ");
SetNomeSocio(dati.nextLine(),libro[i]);
System.out.println("Inserisci il cognome dell'utente che ha in prestito: ");
SetCognomeSocio(dati.nextLine(),libro[i]);
System.out.println("Inserisci l'anno del libro: ");
SetAnno(dati.nextInt(),libro[i]);
}
}







public static void main(String[] args) {
// Dichiarazione variabili

int dim;
Scanner Input=new Scanner(System.in);
System.out.println("Inserisci numero di libri contenuti: ");
dim=Input.nextInt();
Biblioteca[] libro=new Biblioteca[dim];

CaricaLibro(libro);


}

}


Perchè quando mando in esecuzione mi lancia l'eccezione NullPointerException?

Oceans11
24-09-2008, 17:28
1) dovresti postare per intero il messaggio di errore, così è più facile per chi ti aiuta capire dove guardare
2) non si può certo dire che sia una corretta visione del paradigma ad oggetti :D.....non ti è chiaro forse qualcosa?

darkmax
24-09-2008, 21:44
1) dovresti postare per intero il messaggio di errore, così è più facile per chi ti aiuta capire dove guardare
2) non si può certo dire che sia una corretta visione del paradigma ad oggetti :D.....non ti è chiaro forse qualcosa?

Ok.. domani lo posto.. perchè dici che non è una corretta visione?

Oceans11
24-09-2008, 22:56
perchè dici che non è una corretta visione?

beh.....

Ma ok, stai alle prime armi probabilmente, quindi è comprensibile, però puoi migliorare no?

Come prima cosa, prima del codice, pensa a cosa vuoi realmente fare:

Una biblioteca "contiene" libri (sperabilmente non uno solo) e (per quanto ho capito) tiene anche memoria dei soci

Un libro ha le seguenti proprietà: codice, titolo, anno, genere
Un socio ha: nome e cognome
La biblioteca ha: elenco dei libri, elenco dei soci

Gli oggetti, le entità (da qui capisci di quali classi hai bisogno) sono sottolineati
le proprietà degli oggetti, le peculiarità di interesse di ogni oggetto, sono in corsivo.

Questa è una semplice astrazione dell'esercizio (o quello che è), prova a dormirci su...;)

darkmax
29-09-2008, 08:50
beh.....

Ma ok, stai alle prime armi probabilmente, quindi è comprensibile, però puoi migliorare no?

Come prima cosa, prima del codice, pensa a cosa vuoi realmente fare:

Una biblioteca "contiene" libri (sperabilmente non uno solo) e (per quanto ho capito) tiene anche memoria dei soci

Un libro ha le seguenti proprietà: codice, titolo, anno, genere
Un socio ha: nome e cognome
La biblioteca ha: elenco dei libri, elenco dei soci

Gli oggetti, le entità (da qui capisci di quali classi hai bisogno) sono sottolineati
le proprietà degli oggetti, le peculiarità di interesse di ogni oggetto, sono in corsivo.

Questa è una semplice astrazione dell'esercizio (o quello che è), prova a dormirci su...;)

1) Mi potresti aiutare a capire dove ho sbagliato?
2) Ci sono online siti che propongono esercizi e poi mettono la soluzione?

darkmax
29-09-2008, 10:00
Perchè questo codice non va? Come faccio io a mettere i libri in un array di oggetti libri?

package biblioteca2;

/**
*
* @author internet
*/

import java.util.Scanner;
import java.lang.Math;


public class Biblioteca2 {

private static String cod_libro;
private static String titolo;
private static int anno;
private static String genere;
private static String nome_socio;
private static String cognome_socio;

public static int i;


public static void SetCod(String cod){
Biblioteca2.cod_libro=cod;
}

public static void SetTitolo(String lib){
Biblioteca2.titolo=lib;
}

public static void SetGenere(String gen){
Biblioteca2.genere=gen;
}
public static void SetNomeSocio(String nom){
Biblioteca2.nome_socio=nom;
}

public static void SetCognomeSocio(String cog){
Biblioteca2.cognome_socio=cog;
}

public static void SetAnno(int a){
Biblioteca2.anno=a;
}


public static String GetCod(Biblioteca2 c){
return c.cod_libro;
}

public static String GetTitolo(Biblioteca2 c){
return c.titolo;
}

public static String GetGenere(Biblioteca2 c){
return c.genere;
}
public static String GetNomeSocio(Biblioteca2 c){
return c.nome_socio;
}

public static String GetCognomeSocio(Biblioteca2 c){
return c.cognome_socio;
}


public static boolean Prestito(Biblioteca2 c,String name,String surname){
boolean rit;
if((c.nome_socio.equals("assente"))&&(c.cognome_socio.equals("assente"))){
SetNomeSocio(name);
SetCognomeSocio(surname);
System.out.println("Il libro ora è in prestito a: "+name+" "+surname);
rit=true;
}

else{
rit=false;
}
return rit;

}


public static boolean Restituzione(Biblioteca2 c,String name,String surname){

if((c.nome_socio.equals(name))&&(c.cognome_socio.equals(surname))){
SetNomeSocio("assente");
SetCognomeSocio("assente");
System.out.println("Il libro è stato resistuito da: "+name+" "+surname);
return true;
}

else{
return false;
}

}


public static void OrdinaGenere(Biblioteca2 [] c){
String aus;
aus="";
for(int i=0;i<c.length;i++){
if(c[i].genere.charAt(0)>c[i+1].genere.charAt(0)){
aus=c[i].genere;
c[i].genere=c[i+1].genere;
c[i+1].genere=aus;
}

}
}


public static void OrdinaTitolo(Biblioteca2 [] c){
String aus;
aus="";
for(int i=0;i<c.length;i++){
if(c[i].titolo.charAt(0)>c[i+1].titolo.charAt(0)){
aus=c[i].titolo;
c[i].titolo=c[i+1].titolo;
c[i+1].titolo=aus;
}

}
}

public static void VisualizzaGenere(Biblioteca2 [] c,String gen){
System.out.println("Visualizza per genere");
for(int i=0;i<c.length;i++){
if(GetGenere(c[i]).equals(gen)){
System.out.println("I libri del genere: "+gen+ " sono: "+c[i].titolo);
}
else{
System.out.println("Genere non trovato");
}

}

}


public static void VisualizzaTitolo(Biblioteca2 [] c,String tit){
System.out.println("Visualizza per titolo");
for(int i=0;i<c.length;i++){
if(GetTitolo(c[i]).equals(tit)){
System.out.println("Il libro: "+tit);
System.out.println("Genere: "+GetGenere(c[i]));
System.out.println("Prenotato da: "+GetNomeSocio(c[i])+ " " +GetCognomeSocio(c[i]));
System.out.println("Codice: "+GetCod(c[i]));
}
else{
System.out.println("Titolo non trovato");
}

}

}

public static void main(String[] args) {
// Dichiarazione variabili

boolean rest=false;
boolean ret=false;
int dim,val;
String gene,nam,cogn;
nam="";
cogn="";
Scanner Input=new Scanner(System.in);
Scanner Interi=new Scanner(System.in);
System.out.println("Inserisci numero di libri contenuti: ");
dim=Input.nextInt();
Biblioteca2[] lib=new Biblioteca2[dim];


String c;
Scanner dati=new Scanner(System.in);
for(i=0;i<lib.length;i++){
System.out.println("Libro n° "+i);
System.out.println("Inserisci il codice del libro: ");
c=dati.nextLine();
lib[i].SetCod(c);
System.out.println("Inserisci il titolo del libro: ");
lib[i].SetTitolo(dati.nextLine());
System.out.println("Inserisci il genere del libro: ");
lib[i].SetGenere(dati.nextLine());
System.out.println("Inserisci il nome dell'utente che ha in prestito: ");
lib[i].SetNomeSocio(dati.nextLine());
System.out.println("Inserisci il cognome dell'utente che ha in prestito: ");
lib[i].SetCognomeSocio(dati.nextLine());
System.out.println("Inserisci l'anno del libro: ");
lib[i].SetAnno(Interi.nextInt());
}


// OrdinaGenere(lib);

String aus;
aus="";
for(i=0;i<lib.length;i++){
if(lib[i].genere.charAt(0)>lib[i+1].genere.charAt(0)){
aus=lib[i].genere;
lib[i].genere=lib[i+1].genere;
lib[i+1].genere=aus;
}




System.out.println("Digita 1 per Genere | 2 per Titolo | 3 per Prestito | 4 per Restituzione");

val=Input.nextInt();
switch(val){
case 1:
gene=Input.nextLine();
VisualizzaGenere(lib,gene);
break;
case 2:
gene=Input.nextLine();
VisualizzaTitolo(lib,gene);
break;
case 3:
System.out.println("Inserisci il tuo nome: ");
nam=Input.nextLine();
System.out.println("Inserisci il cognome: ");
cogn=Input.nextLine();
// ret=lib[i].Prestito(nam,cogn);
if (ret==true){
System.out.println("Libro disponibile");
}
break;
case 4:
System.out.println("Inserisci il tuo nome: ");
nam=Input.nextLine();
System.out.println("Inserisci il tuo cognome: ");
cogn=Input.nextLine();
// rest=Restituzione([]lib,nam,cogn);
if(rest==false){
System.out.println("Nome o cognome utente errato");
}
break;
}



}
}

}

darkmax
29-09-2008, 10:39
aiutatemi!! :(

darkmax
29-09-2008, 17:00
up

darkmax
01-10-2008, 12:12
up