Esercizi per la 3E in preparazione alla verifica

  • 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.

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);
	}

}
  1. Modificare il programma in maniera da individuare la temperatura massima e la temperatura minima; quindi stamparle.
  2. 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

  1. JNetRealizzare 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.
  1. 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

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