- Creare un programma che cerchi all’interno di un intervallo compreso fra n1 ed n2 i numeri che sono multipli di un valore intero n e li stampi. n1, n2 ed n devono essere inseriti da tastiera. Bisogna controllare che n1 sia minore di n2; in caso contrario bisogna ripetere la richiesta.
- Creare un array di 100 elementi int generati casualmente da 0 a 9 mediante il metodo Math.random(). Il programma deve contare quanti sono i numeri 0, i numeri 1, i numeri 2 etc. memorizzando i valori in un altro array con 10 elementi. Stampare la tabella dei conteggi in un formato comprensibile.
- Creare una classe Anagrafe con gli attributi nome, cognome, sesso, anno di nascita. Devono essere presenti i metodi:
- costruttore
- boolean maschio() che restituisce true se il sesso è ‘m’ altrimenti false;
- boolean femmina();
- int eta(int annoCorrente) che calcola l’età della persona inserendo l’anno corrente.
Categoria: Informatica
Onda
Realizzare una sottoclasse di JPanel di nome JOnda che abbia un attributo lunghezzaOnda preimpostato a 100 e frequenza 1. Deve rappresentare un’onda sinusoidale di ampiezza preimpostata a 40 pixel. Due metodi start e stop devono avviare e fermare l’animazione. Un thread deve incrementare una variabile t preimpostata a 0 e l’onda deve muoversi verso destra. Utilizzare l’equazione dell’onda:
y = A sin (k x – om t)
k = 2 Pi / lunghezzaOnda
om = 2 Pi frequenza
A = ampiezza
Progetto Eclipse: Onda.zip
Programma per la 5E
L’utilizzo degli adattatori in Java in sostituzione delle interfacce è spiegato bene sul libro di Claudio De Sio Cesari Object oriented && Java 5 il cui file PDF zippato è liberamente scaricabile sul sito http://www.claudiodesio.com/
Fare riferimento al paragrafo 15.4.3 Altri tipi di eventi da pag. 532 a pag. 536.
Realizzare una sottoclasse di JComponent che visualizzi un settore circolare giallo con bordo nero. Deve possedere un attributo position variabile fra 0 e 360 gradi, che contiene l’ampiezza del settore circolare disegnato. Al click del mouse sopra l’oggetto deve partire un thread che ad intervalli di 20 millisecondi incrementa position di 5 gradi. Quando position raggiunge i 360, riparte da 0. Cliccando nuovamente l’animazione si interrompe. Tale componente simula la “clessidra rotante” che si vede spesso su internet o nei programmi durante i caricamenti o i tempi di attesa.
Progetto Eclipse: ClessidraRotante.zip
Temperature
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class EsempioArray {
public static void main(String[] arg) {
double[] t = new double[7];
String[] g = { "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì",
"Sabato", "Domenica" };
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader tastiera = new BufferedReader(input);
System.out.println("Inserisci le temperature della settimana");
for (int i = 0; i < 7; i++) {
System.out.print("Temperatura di " + g[i] + ": ");
try {
t[i] = Double.parseDouble(tastiera.readLine());
} catch (NumberFormatException | IOException e) {
}
}
double somma = 0.0;
for (int i = 0; i < 7; i++) {
somma += t[i];
}
System.out.println("La media della temperature è: " + somma / 7.0);
}
}
- Modificare il programma in maniera da individuare la temperatura massima e la temperatura minima; quindi stamparle.
- Modificare il programma in maniera da individuare la temperatura massima e la temperatura minima registrando anche in quali giorni della settimana si sono verificate; quindi stampare la temperatura massima con a destra i giorni relativi; stessa cosa per la temperatura minima.
Rettangolo per la 3E
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Rettangolo {
public static void main(String[] args) {
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader tastiera = new BufferedReader(input);
try {
double b;
do {
System.out.print("Inserisci la misura della base: ");
String bs = tastiera.readLine();
b = Double.parseDouble(bs);
} while (b <= 0);
double h;
do {
System.out.print("Inserisci la misura dell'altezza : ");
String hs = tastiera.readLine();
h = Double.parseDouble(hs);
} while (h <= 0);
double area = b * h;
System.out.println("L'area è : " + area);
} catch (IOException e) {
System.out.println("Errore nella lettura da tastiera");
} catch (NumberFormatException e) {
System.out.println("Errore nella conversione del numero");
}
}
}
VideoGame per la 5E
JAstro
package videogame;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
public class JAstro extends JLabel {
public JAstro() {
setIcon(new ImageIcon(JAstro.class.getResource("/videogame/image/astro_invader.png")));
}
}
Consiglio. Per poter muovere JAstro con i tasti inserirlo all’interno della classe JSpace utilizzando il window builder e rendendo globale la variabile dell’oggetto di tipo JAstro.
JSpace
package videogame;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
public class JSpace extends JPanel implements KeyListener {
public JSpace() {
this.setPreferredSize(new Dimension(200,200));
this.setBackground(Color.BLACK);
}
@Override
public void keyPressed(KeyEvent arg0) {
if (arg0.getKeyChar()=='4') // sposta l'astronave a sinistra
...
}
@Override
public void keyReleased(KeyEvent arg0) {
}
@Override
public void keyTyped(KeyEvent arg0) {
}
}
Programma per la 5E
Realizzare una classe JNet sottoclasse di JPanel che permetta di disegnare un percorso mediante delle linee spezzate. Le coordinate dei vertici devono essere memorizzare in 2 array px[] e py[] sufficientemente ampi. Nel paintComponent deve essere eseguito un ciclo sugli array e deve essere disegnata la spezzata con dei quadratini rossi in corrispondenza dei vertici. I vertici devono essere inseriti cliccando in una certa posizione con il mouse.
- Modificare il programma della pallina che rimbalza utilizzando l’interfaccia WindowListener e facendo in modo che quando la finestra viene minimizzata l’animazione si interrompa e che quando la finestra viene ripristinata l’animazione riprenda dal punto in cui la pallina si trovava precedentemente.
JCoordinate
package pallina;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JPanel;
public class JCoordinate extends JPanel implements MouseMotionListener, MouseListener {
private int x = 0, y = 0;
public JCoordinate() {
this.setPreferredSize(new Dimension(100, 100));
this.addMouseMotionListener(this);
this.addMouseListener(this);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int w = this.getWidth();
int h = this.getHeight();
g.setColor(Color.LIGHT_GRAY);
g.fillRect(0, 0, w, h);
g.setColor(Color.BLACK);
g.drawString("(" + x + "," + y + ")", x, y);
}
@Override
public void mouseDragged(MouseEvent me) {
}
@Override
public void mouseMoved(MouseEvent me) {
x = me.getX();
y = me.getY();
this.repaint();
}
@Override
public void mouseClicked(MouseEvent e) {
JPanel box = new JPanel();
box.setSize(5, 5);
box.setLocation(x, y);
box.setBackground(Color.RED);
box.setVisible(true);
this.add(box);
this.repaint();
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
}
Grafico settimanale delle temperature
Consultare anche il PDF presente alla pagina https://liceocuneo.it/oddenino/informatica/java/interfacce-per-la-gestione-degli-eventi/
JGrafico
package grafico;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
public class JGrafico extends JPanel implements MouseMotionListener {
String[] giorni = new String[7];
String[] temperature = new String[9];
public JGrafico() {
setBorder(new LineBorder(new Color(0, 0, 0), 2));
setForeground(Color.BLACK);
this.setPreferredSize(new Dimension(200, 200));
this.setBackground(Color.WHITE);
giorni[0] = "Sun";
giorni[1] = "Mon";
giorni[2] = "Tue";
giorni[3] = "Wed";
giorni[4] = "Thu";
giorni[5] = "Fri";
giorni[6] = "Sat";
temperature[0] = "40";
temperature[1] = "30";
temperature[2] = "20";
temperature[3] = "10";
temperature[4] = "0";
temperature[5] = "-10";
temperature[6] = "-20";
temperature[7] = "-30";
temperature[8] = "-40";
this.addMouseMotionListener(this);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int w = this.getWidth(), h = this.getHeight();
g.drawLine(0, h / 2, w, h / 2);
int w7 = w / 7, w14 = w / 14, h2 = h / 2;
for (int i = 0; i < 7; i++) {
g.drawLine(w14 + i * w7, h2 - 10, w14 + i * w7, h2 + 10);
g.drawString(giorni[i], w14 + i * w7, h2 + 25);
}
int h10 = h / 10;
for (int i = 0; i < 9; i++) {
g.drawLine(0, h10 + i * h10, 10, h10 + i * h10);
// g.drawString(temperature[i], 10, h10+i*h10);
}
}
@Override
public void mouseDragged(MouseEvent arg0) {
}
@Override
public void mouseMoved(MouseEvent me) {
int x = me.getX();
int y = me.getY();
System.out.println(x+" "+y);
}
}
Pallina

JBall
package pallina;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JComponent;
public class JBall extends JComponent implements Runnable {
private boolean running = false;
private int vx = 10, vy = 10;
public JBall() {
this.setPreferredSize(new Dimension(15, 15));
}
public boolean isRunning() {
return running;
}
public void setRunning(boolean running) {
this.running = running;
}
public int getVx() {
return vx;
}
public void setVx(int vx) {
if (Math.abs(vx) <= 10)
this.vx = vx;
}
public int getVy() {
return vy;
}
public void setVy(int vy) {
if (Math.abs(vy) <= 10)
this.vy = vy;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int w = this.getWidth();
int h = this.getHeight();
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(Color.GREEN);
g2.fillOval(0, 0, w, h);
g2.setColor(Color.BLACK);
g2.drawOval(0, 0, w - 1, h - 1);
}
public void start() {
if (!running) {
running = true;
Thread t = new Thread(this);
t.setDaemon(true);
t.start();
}
}
public void stop() {
running = false;
}
@Override
public void run() {
while (running) {
int x = this.getX();
int y = this.getY();
x += vx;
y += vy;
Component contenitore = this.getParent();
if (x < 0) {
vx = Math.abs(vx);
x += vx;
}
if (x > contenitore.getWidth() - this.getWidth()) {
vx = -Math.abs(vx);
x += vx;
}
if (y < 0) {
vy = Math.abs(vy);
y += vy;
}
if (y > contenitore.getHeight() - this.getHeight()) {
vy = -Math.abs(vy);
y += vy;
}
this.setLocation(x, y);
try {
Thread.sleep(20);
} catch (InterruptedException e) {
}
}
}
}
Main
package pallina;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.SpringLayout;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;
import java.awt.Color;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class Main extends JFrame {
private JBall ball;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Main frame = new Main();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Main() {
setTitle("Pallina");
setBounds(100, 100, 450, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
SpringLayout springLayout = new SpringLayout();
getContentPane().setLayout(springLayout);
JButton btnStart = new JButton("Start");
btnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
start();
}
});
springLayout.putConstraint(SpringLayout.WEST, btnStart, 10, SpringLayout.WEST, getContentPane());
springLayout.putConstraint(SpringLayout.SOUTH, btnStart, -10, SpringLayout.SOUTH, getContentPane());
getContentPane().add(btnStart);
JButton btnStop = new JButton("Stop");
btnStop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
stop();
}
});
springLayout.putConstraint(SpringLayout.NORTH, btnStop, 0, SpringLayout.NORTH, btnStart);
springLayout.putConstraint(SpringLayout.WEST, btnStop, 6, SpringLayout.EAST, btnStart);
getContentPane().add(btnStop);
JPanel panel = new JPanel();
panel.setLayout(null);
panel.setBackground(Color.WHITE);
panel.setBorder(new LineBorder(new Color(0, 0, 0)));
springLayout.putConstraint(SpringLayout.NORTH, panel, 10, SpringLayout.NORTH, getContentPane());
springLayout.putConstraint(SpringLayout.WEST, panel, 10, SpringLayout.WEST, getContentPane());
springLayout.putConstraint(SpringLayout.EAST, panel, -10, SpringLayout.EAST, getContentPane());
springLayout.putConstraint(SpringLayout.SOUTH, panel, -6, SpringLayout.NORTH, btnStart);
getContentPane().add(panel);
ball = new JBall();
ball.setBounds(10, 10, 15, 15);
panel.add(ball);
}
private void start() {
ball.start();
}
private void stop() {
ball.stop();
}
}
Progetto Eclipse: Pallina