Olá pessoal, preciso realizar um merge em java, com valores de uma Instância de uma classe, Fila a e Fila b, fiz um método inserir(), na classe Fila. e gostaria de acessar os valores de a e b. E atribuir esses valores, a uma outra Instância da classe Fila, tipo Fila c = new Fila(recebe os valores de A e B). Mais não tenho muito ideia de fazer isso, agradeço qualquer tipo de ajuda.

public class Fila {
private int remove;
private int max = 0;
private int dado[];
public Fila(int tamanhoFila) {
this.dado = new int[tamanhoFila];
this.remove = 0;
}
Fila() {
this(3);
}
public void insere(Fila f, int elemento) {
if (this.max < this.dado.length) {
this.dado[this.max] = elemento;
this.max++;
}
}
public void cheia(){
if(this.max == this.dado.length){
System.out.println("A Fila esta cheia");
} else{
System.out.println("A Fila não esta cheia");
}
}
public boolean vazia( ){
if(this.max == 0){
return true;
}
return false;
}
public Object primeiro(){
if (this.vazia()){
return "A fila esta vazia !";
}
return this.dado[0];
}
public Object ultimo(){
return this.dado[--max];
}
public Object remove() {
int pos = 0;
int removeElemento = this.dado[pos];
for (int i = pos; i < this.max - 1; i++) {
dado[i] = dado[i+1];
}
this.max--;
return removeElemento;
}
@Override
public String toString() {
StringBuilder s = new StringBuilder();
for (int i = 0; i <this.max; i++) {
s.append(this.dado[i]);
s.append(" ");
}
return s.toString();
}
public class Executa {
public static void main(String[] args) {
Fila a = new Fila(4);
Fila b = new Fila(5);
Fila c = new Fila(9);
a.insere(12);
a.insere(35);
a.insere(52);
a.insere(64);
b.insere(05);
b.insere(15);
b.insere(23);
b.insere(55);
b.insere(75);
}
}
Não sei se entendi muito bem. “Fila” é basicamente um array ordenado (pelo exemplo da imagem) e você precisa unir esses dois arrays num novo array de forma ordenada?
1 curtida
Postei o código para entender melhor, eu tenho um método inserir, que insere valores de A e B, gostaria de colocar esses valores, dentro de uma Fila C, e ordenar eles de forma crescente.
Acrescenta esses dois métodos na sua classe Fila:
public static Fila merge(Fila filaA, Fila filaB) {
Fila filaC = new Fila(filaA.dado.length + filaB.dado.length);
int proximoA = 0;
int proximoB = 0;
int proximoC = 0;
while (proximoA < filaA.dado.length && proximoB < filaB.dado.length) {
if (filaA.dado[proximoA] <= filaB.dado[proximoB]) {
filaC.dado[proximoC++] = filaA.dado[proximoA++];
} else {
filaC.dado[proximoC++] = filaB.dado[proximoB++];
}
}
while (proximoA < filaA.dado.length) {
filaC.dado[proximoC++] = filaA.dado[proximoA++];
}
while (proximoB < filaB.dado.length) {
filaC.dado[proximoC++] = filaB.dado[proximoB++];
}
return filaC;
}
public void mostrarElementosDaFila() {
for (int elemento : dado) {
System.out.print(elemento + " ");
}
System.out.println();
}
Aí você pode testar num método main dessa forma:
public static void main(String[] args) throws IOException {
Fila filaA = new Fila(4);
filaA.insere(filaA, 12);
filaA.insere(filaA, 35);
filaA.insere(filaA, 52);
filaA.insere(filaA, 64);
Fila filaB = new Fila(5);
filaB.insere(filaB, 5);
filaB.insere(filaB, 15);
filaB.insere(filaB, 23);
filaB.insere(filaB, 55);
filaB.insere(filaB, 75);
Fila filaMergeada = Fila.merge(filaA, filaB);
filaMergeada.mostrarElementosDaFila();
}
Resultado:
Ordenadinho 

E, detalhe, não tem necessidade do parâmetro Fila f
no método insere
. Só mantive pra deixar compatível com o seu código.
1 curtida
Muito obrigado pela resolução, com os valores informados deu tudo certo, mais no momento em que altero os valores, ele ordena alguns números de forma errada. Saberia informar o erro ?
Como assim altera os valores? Pode me mostrar exatamente o que você fez?
1 curtida
public static void main(String[] args) {
Fila filaA = new Fila(4);
Fila filaB = new Fila(5);
filaA.insere(2);
filaA.insere(4);
filaA.insere(5);
filaA.insere(6);
filaB.insere(9);
filaB.insere(1);
filaB.insere(10);
filaB.insere(3);
filaB.insere(12);
Fila filaMergeada = Fila.merge(filaA, filaB);
filaMergeada.mostrarElementosDaFila();
}

Esta ordenando de forma incorreta, nesse exemplo da foto
Mas no seu exemplo a sua filaB
não está ordenada, né. Pelo exemplo da imagem que você deu, eu considerei que as filas que serão mergeadas sempre viriam ordenadas. Não é o caso, então?
Sim, o enunciado da questão especifica que as duas entradas são ordenadas. Então, o código que te mandei já atende isso.
1 curtida