PDA

Visualizza la versione completa : [JAVA] Dichiarazione e inizializzazione String


SkOrPiOn`87
20-08-2005, 06:00
Ciao,

Sto realizzando un programma, che al suo interno ha un array di String....
Come logica di programmazione a cui sono abituato io, prima dichiaro l'array di String e dopo nel costruttore inserisco i valori...

public class Mazzo {

private String deckNumber[];
public Mazzo() {
deckNumber = new String[10];
deckNumber = {"Uno", "Due".....};
}
}

Solamente che ottengo sempre errori, in qualsiasi modo io provi a farlo...

Qualcuno può farmi vedere in che modo devo dichiarare ed inizializzare?


Grazie Mille :ciauz:

floyd
20-08-2005, 09:44
fai prima
private String[] deckNumber;
public Mazzo() {
deckNumber = {"Uno", "Due".....};

SkOrPiOn`87
21-08-2005, 18:38
2 Array constants can only be used in initializers Mazzo.java

anx721
21-08-2005, 22:27
se non sei nell'ambito di una dichiarazione, l'inizializzazione di un array deve avvenire con la seguente sintassi:

deckNumber = new String[]{"Uno", "Due", ...};

attenzione a non specificare la dimensione dell'arrayi in String[] perchè quella la ricava automaticamente dal numero di elementi tra parentesi graffe.

SkOrPiOn`87
22-08-2005, 05:39
Ho Altri due errori che non capisco:

public int[] newCarta() {
int card[], rows, columns;
card = new int[2];
for (rows=0; rows<3; rows++) {
for (columns=0; columns<10; columns++) {
if (deck[rows][columns] == pntCard) {
card[0] = rows;
card[1] = columns;
pntCard++;
return card;
}
}
}
}

2 This method must return a result of type int[] Mazzo.java



public String getBriscolaFace() {
return tavoloCarta[0][1];
}

2 Type mismatch: cannot convert from int to String Mazzo.java

In questo secondo errore vorrei convertie un int in una String....

floyd
22-08-2005, 09:27
public int[] newCarta() {
int card[], rows, columns;
card = new int[2];
for (rows=0; rows<3; rows++) {
for (columns=0; columns<10; columns++) {
if (deck[rows][columns] == pntCard) {
card[0] = rows;
card[1] = columns;
pntCard++;
return card;
}
}
}
// e qua non ritorna nulla e fa errore
return null; // ora sì
}

return String.valueOf(tavoloCarta[0][1]);

SkOrPiOn`87
22-08-2005, 11:05
for (i=0; i<3; i++) {
giocatore.setCarte(carte.newCarta()); //Diamo una carta al giocatore x3
computer.setCarte(carte.newCarta()); //Diamo una carta al computer x3
carteTavola[i] = new JButton(carte.getCard(giocatore.getCard(i)));
carteTavola[i].addActionListener(
new ActionListener() { //Classe Interna Anonima
public void actionPerformed( ActionEvent event)
{
giocatore.getCarta(i);
//computer.getCarta();
}
}
);
container.add(carteTavola[i]);
}


2 Cannot refer to a non-final variable i inside an inner class defined in a different method

anx721
22-08-2005, 13:17
In una classe interna non può accedere alle varabili locali di un metodo o ai suoi argomenti non dichiarati final...dal codice no nsi evince il problema perchè non si vede la classe interna e quale cvariabile essa accede.

Stai usando il compilatore della sun?

SkOrPiOn`87
22-08-2005, 21:29
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Briscola extends JFrame {

private Player giocatore, computer;
private Mazzo carte;
private JButton carteTavola[], briscola;
private Container container;
private GridLayout griglia;

public Briscola() {
super("Briscola v. 0.1");

int i;
giocatore = new Player();
computer = new Player();
carte = new Mazzo();
carteTavola = new JButton[3];

griglia = new GridLayout(3,4);
container = getContentPane();
container.setLayout(griglia);


carte.Mescola();

briscola = new JButton(carte.getBriscolaNumber() + carte.getBriscolaFace());
container.add(carteTavola[i]);

for (i=0; i<3; i++) {
giocatore.setCarte(carte.newCarta()); //Diamo una carta al giocatore x3
computer.setCarte(carte.newCarta()); //Diamo una carta al computer x3
carteTavola[i] = new JButton(carte.getCard(giocatore.getCard(i)));
carteTavola[i].addActionListener(
new ActionListener() { //Classe Interna Anonima
public void actionPerformed( ActionEvent event)
{
giocatore.getCarta(i);
//computer.getCarta();
}
}
);
container.add(carteTavola[i]);
}


setSize(200,100);
setVisible(true);
}

public static void main(String[] args) {
Briscola application = new Briscola();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE);
}
}


Questo è il codice, uso Eclipse come compilatore...

anx721
22-08-2005, 21:57
La variabile i nell'istruzione

giocatore.getCarta(i);

all'interno della calsse interna che implementa il listener del pulsante è illegale perche accede ad una varaible che non è final: se quel listener non fosse implementato tramite classe interna ma come una normale classe non avrebbe alcuna visibilità della variabile i; se ti serve quella variabile non puoi usare una clase interna ma devi impelmentare il listener a parte con un costruttore che prende la variabile i come argomento.

Loading