Jump to content
lccunha

Aspirador de po Java

Recommended Posts

lccunha

ola pessoal bom dia, estou com um segundo trabalho da faculdade que seria percorrer uma matriz (cada posição seria como um cômodo) e 'limpar' a sujeira contida em algum deles, mas agora preciso percorrer essa de forma aleatória e quando encontrado um obstáculo partir para outra posição, esse seria meu código fonte, alguém poderia me ajudar?

public class aspirador {
public static void main(String[] args) throws InterruptedException {

	int[][] matriz=new int[5][5];
	Random num = new Random();
	int cont = 0;
	System.out.print("-- Estado inicial dos cômodos--\n");
	for (int i=0; i< 5; i++){  //
		System.out.println();
		for (int j=0; j<5; j++){
			matriz[i][j]=num.nextInt(100);
			if (matriz[i][j]%2==0){  //se num é par preenche cômodo com 0
				matriz[i][j]=0;
			}
			else (matriz[i][j]){
				matriz[i][j]=1;
			}
		   System.out.print("["+matriz[i][j]+"]"); //exibe todos os cômodos
		}
	}
	System.out.print("\n \n-- Executando a limpeza -- \n");
	Thread.sleep(2500);

	//Inicio da limpeza

	for (int i=0; i< 5; i++){
		System.out.println();
		for (int j=0; j<5; j++){
		   if (matriz[i][j]==1){ //se for 1 esta sujo então limpa e soma ao contador
				matriz[i][j]=0;
				cont++;
			}
		   System.out.print("["+matriz[i][j]+"]");
			Thread.sleep(1000);
		}
	}


	//Final da limpeza

	System.out.println();
	int custo = (cont *5) - (50 - cont); //cálculo do custo
	System.out.println("\nLimpeza concluída, custo total: "+custo+"\n");

	}
}

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
HappyHippyHippo

tens de explicar melhor o que quer dizer com : "percorrer essa de forma aleatória e quando encontrado um obstáculo partir para outra posição"


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
lccunha

seria o seguinte, partir de qualquer posição e quando encontrar um obstáculo (um valor diferente de 0 ou 1) deve seguir outro caminho, entendeste? por exemplo

0 1 0 1

0 2 0 2

2 0 0 1

partindo de qualquer posição deveria limpar todas as sujeiras (valor 1) e desviar dos obstáculos (valor 2)

Share this post


Link to post
Share on other sites
lccunha

Caminho seria percorrer as posições da matriz buscando 'sujeiras' (valor 1), isso de qualquer forma, partindo de qualquer posição, não estou conseguindo definir como passar o mínimo de vezes por um lugar para que a limpeza seja mais rápida

Share this post


Link to post
Share on other sites
HappyHippyHippo

visto que continuas a fornecer a mínima informação possível e apresentando apenas pequenos bocados do exercício em cada resposta, eu irei fazer o mesmo :

- ignorar a necessidade do outro de ter a mínima noção do problema para poder ter um deslumbre da solução

conclusão, {b]eu[/b] passarei a ignorar este tópico


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
lccunha

mas o enunciado ja esta todo ai, o que vc não entendeu ainda? me desculpe se não estou sendo claro o suficiente

Share this post


Link to post
Share on other sites
Rui Carlos

Vais ter que mudar o ciclo da "limpeza". Começas por exemplo com o aspirador na posição (0,0). Para cada posição, tens no máximo 4 (ou 8?) direcções que podes tomar. Geras um número aleatório entre 0 e 3, associas a cada um deles uma das direcções, e conforme o valor gerado, verificas se tens uma direcção válida (não é obstáculo, nem sai fora do espaço), e se for válida, avanças para a nova posição (se não for válida, geras um novo número aleatório). E repetes o processo gerando novos números, e avançando para novas posições. A condição de paragem pode ser um teste que verifica se a matriz ainda tem 1s.

Share this post


Link to post
Share on other sites
lccunha

consegui desenvolver um novo código com JPanel para melhor visualização, mas não estou conseguindo recarregar a o painel para visualizar o agente 'em movimento', como posso fazer isso? recarregar o painel a cada andar do aspirador?

package teste2;

import java.lang.Math.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;
import javax.swing.*;

/**
*
* @author TS
*/
public class vcai extends JFrame implements ActionListener {

JTextField[][] b = new JTextField[10][10];
JButton bt;
//int count;
int face;//1 u;2 d; 3 l; 4 r
int i;
int j;
int moves;

void move() {
	Random rn = new Random();
	int n = 4;
	int nface = Math.abs(rn.nextInt() % n);

	System.out.println(nface);
	switch (face) {
		case 0:
			if (moves%5==0 || i + 1 > 9 || b[i + 1][j].getText().equalsIgnoreCase("o")) {
				face = nface;
				System.out.println(nface);
			} else {
				b[i + 1][j].setText("A");
				b[i][j].setText("c");
				i = i + 1;
			}
				moves=moves+1;
			break;
		case 1:
			if (moves%5==0 || i - 1 < 0 || b[i - 1][j].getText().equalsIgnoreCase("o")) {
				face = nface;
				System.out.println(nface);
			} else {
				b[i - 1][j].setText("A");
				b[i][j].setText("c");
				i = i - 1;
			}
				moves=moves+1;
			break;
		case 2:
			if (moves%5==0 || j - 1 < 0 || b[i][j - 1].getText().equalsIgnoreCase("o")) {
				face = nface;
				System.out.println(nface);
			} else {
				b[i][j - 1].setText("A");
				b[i][j].setText("c");
				j = j - 1;
			}
				moves=moves+1;
			break;
		case 3:
			if (moves%5==0 || j + 1 > 9 || b[i][j + 1].getText().equalsIgnoreCase("o")) {
				face = nface;
				System.out.println(nface);
			} else {
				b[i][j + 1].setText("A");
				b[i][j].setText("c");
				j = j + 1;
			}
				moves=moves+1;
			break;
	}
	if(moves%1==0) {
		JOptionPane.showMessageDialog(this,"");
	}
}

//GroupLayout layout = new GroupLayout(getContentPane());
//GroupLayout.Group[] g=new GroupLayout.Group[10];
public vcai() {
	super("vacuum cleaner agent");
	bt = new JButton("Start");
	Container content = this.getContentPane();
	JPanel panel = new JPanel();
	panel.setBackground( Color.BLUE );
	panel.setLayout(new GridLayout(11, 10));
	for (int i = 0; i < 10; i++) {
		//g[i]=layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup());
		for (int j = 0; j < 10; j++) {
			b[i][j] = new JTextField();
			//b[i][j].setLocation((i*10)+10, (j*10)+10);
			panel.add(b[i][j], j);
		}
	}
	bt.addActionListener(this);
	content.add(new JLabel("A: Agent ; o: obstacle ; *: dirt"), BorderLayout.PAGE_END);
	content.add(bt, BorderLayout.AFTER_LINE_ENDS);
	content.add(panel);
	//getContentPane().setLayout(layout);
	//  pack();
	this.setSize(360, 400);
	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

@Override
public void actionPerformed(ActionEvent be) {
	if (be.getActionCommand().equals(bt.getLabel())) {
		//System.out.println("this");
		placeAgent();
		//slp(5000);
		face = 3;
		int l[] = new int[2];
		i = l[0];
		j = l[1];
		moves=1;
		while (true) {
			move();
		 }
	}
}

void placeAgent() {
	outerloop:
	for (int i = 0; i < 10; i++) {
		for (int j = 0; j < 10; j++) {
			if (b[i][j].getText().equalsIgnoreCase("")) {
				b[i][j].setText("A");
				break outerloop;
			}
		}
	}
}


int[] aloc() {
	int l[] = {0, 0};
	outerloop:
	for (int i = 0; i < 10; i++) {
		for (int j = 0; j < 10; j++) {
			if (b[i][j].getText().equalsIgnoreCase("A")) {
				l[0] = i;
				l[1] = j;
				break outerloop;
			}
		}
	}
	return l;
}

public static void main(String[] args) {
	new vcai().setVisible(true);
}
}

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.