Jump to content

Aspirador de po Java


lccunha

Recommended Posts

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

	}
}
Link to post
Share on other sites

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)

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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