martedì 31 marzo 2009

Liste concatenate

//UNA LISTA DI NUMERI CHE DIGITO DA TASTIERA
import java.io.*;
import java.util.*;

public class Lista1 {
Nodo top;
Nodo ultimo;
Nodo nuovo;
int n;
int conta=0;
Scanner in=new Scanner(System.in);//per leggere da tastiera
public void creaLista(){
n=in.nextInt();
while(n!=0) {
nuovo=new Nodo(n); //nuovo è il puntatore
if (top==null) top=nuovo; //così entrambi puntano alla stessa cosa
else {
nuovo.next=top;
top=nuovo;
}
n=in.nextInt();
}
}
public void stampaLista() {
ultimo=top;
while(ultimo!=null) {
System.out.println(ultimo.num);
ultimo=ultimo.next;
}
}
public void contaNodi() {
ultimo=top;
while(ultimo!=null) {
conta++;
ultimo=ultimo.next;
}
System.out.println("Il numero dei nodi e' "+conta);
}

public static void main (String[] args) {
Lista1 l1=new Lista1();
l1.creaLista();
l1.stampaLista();
l1.contaNodi();
}
}

Eseguendo il programma, si otterrà una finestra del tipo...consiste nel digitare dei numeri da tastiera e, una volta premuto 0, la successione viene stampata nel verso contrario a quello d'immissione e successivamente scriverà anche il numero dei nodi:

martedì 3 marzo 2009

Creazione quiz java

Questa prof è la soluzione funzionante del compito che ci aveva assegnato...ora abbiamo corretto gli errori e funziona. Ovviamente grazie anche all'aiuto di Di Bari...XD...
(manca un pezzo quando da il risultato perchè dice che non lo può pubblicare a causa di un errore html...semmai prof glielo faccio vedere lunedì così lo prova anche...)

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.util.Scanner;
import java.io.*;

public class Gioco {
private JFrame quiz; //JFrame crea la finestra
private PannelloQuiz p;
private JButton avanti;
private JPanel pannelloBottoni=new JPanel(new GridLayout(1,1));
private JTextField risposta;
private JLabel r1=new JLabel("Quale e' la citta' piu' popolata di ?");
String[][] nazioni;
private int indice=0;


public Gioco() throws IOException{
quiz=new JFrame("QUIZ");
quiz.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //serve una volta chiusa la finestra a chiudere il programma
quiz.setSize(500,500);
p=new PannelloQuiz();
avanti=new JButton("Domanda successiva");
risposta=new JTextField();
pannelloBottoni.add(avanti);
quiz.add(p,BorderLayout.CENTER); //CENTER, EAST, SOUTH E NORTH servono per
quiz.add(pannelloBottoni,BorderLayout.EAST); //posizionare gli elementi nel pannello
quiz.add(risposta,BorderLayout.SOUTH);
quiz.add(r1,BorderLayout.NORTH);
avanti.addActionListener(new BottoneAvanti());
nazioni=readFile("cittaPopolate.txt");
aggiorna();
quiz.setVisible(true);
}

public class PannelloQuiz extends JPanel { /*faccio una classe interna*/
public void paintComponent(Graphics g) {
Graphics g2D=(Graphics2D) g;
Image quizImmagine0=new ImageIcon(nazioni[indice][2]).getImage();
g.drawImage(quizImmagine0,0,0,this.getWidth(),this.getHeight(),null);
// serve per creare l'immagine sul pannello e poi stamparla
}
}


public void aggiorna() {
r1.setText("Quale e' la citta' piu' popolata di "+nazioni[indice][0]+"?"); //l'array a doppia dimensione serve per caricare le immagini ed è la prima dimansione dell'array e cioè l'indice che gestisce il ciclo
risposta.setText("");
p.repaint();
}

public class BottoneAvanti implements ActionListener {
public void actionPerformed(ActionEvent event){
String tmp = event.getActionCommand();
if (tmp == "Domanda successiva"){
nazioni[indice][3]=Metodi.pulisciStringa(risposta.getText()); //serve per riazzerare la griglia di risposta ad ogni domanda
indice++;
aggiorna();
if (indice==(nazioni.length-1)){
avanti.setText("Risultato quiz");
}
}
if (tmp=="Risultato quiz") {
int punti=0;
for (int i=0; i//porta le risposte che anche se scritte con la maiuscola, in minuscolo per effettuare così un comparamento tra la risposta data e quella giusta ed assegnare o meno i punti
punti++;
risposta.setText("Hai totalizzato "+punti+" punti. Per ricominciare il quiz riavvia il programma");

}

}
}
public String[][] readFile(String readFile) throws IOException{
Scanner cauntLine=new Scanner(new FileReader(readFile));
int cauntLinePoint=0;
while (cauntLine.hasNext()){
cauntLine.next();
cauntLinePoint++;
}
String[][] dataLocal=new String[cauntLinePoint/3][4];
cauntLinePoint=0;
Scanner in=new Scanner(new FileReader(readFile));
while (in.hasNext()){
dataLocal[cauntLinePoint][0]=Metodi.pulisciStringa(Metodi.sostituisciCarattere(in.next(),'#',' ')); //array per gli stati
dataLocal[cauntLinePoint][1]=Metodi.pulisciStringa(Metodi.sostituisciCarattere(in.next(),'#',' ')); // array per la città più popolata
dataLocal[cauntLinePoint][2]=Metodi.sostituisciCarattere(in.next(),'#',' '); //array per l'immagine
dataLocal[cauntLinePoint][3]=""; //array per la risposta data dall'utente
cauntLinePoint++;

}
return dataLocal;
}

public static void main(String[] args) throws IOException{

Gioco quiz=new Gioco();

}
}
Questo è il file dal quale il programma attingerà le risposte giuste con il link delle relative immagini delle città:

Italia Milano milano.jpg Francia Parigi parigi.jpg Spagna Madrid madrid.jpg Portogallo Lisbona lisbona.jpg Germania Berlino berlino.jpg Grecia Atene atene.jpg Olanda Amsterdam amsterdam.jpg Danimarca Copenhagen copenhagen.jpg Austria Vienna vienna.jpg

Eseguendo il programma si otterrà una finestra come quella nell'esempio...