Orientando os Objetos e chamando recursos de outra classe!

6 respostas
C

Boa tarde a todos, sou iniciante em java , e com muita vontade em aprender.

Estou tentando criar um programinha simples que faça a seguinte Execução:

Abaixo já tem o Layout do Sistema para um melhor entendimento:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * OrdenadorVetores.java
 *
 * Created on 31/03/2011, 09:31:12
 */

package vetores;

/**
 *
 * @author Crazy
 */
public class OrdenadorVetores extends javax.swing.JFrame {

    QuickSort dados = new QuickSort();
    /** Creates new form OrdenadorVetores */
    public OrdenadorVetores() {
        initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        Vetor = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        Resultado = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jLabel5 = new javax.swing.JLabel();
        QuickSorte = new javax.swing.JButton();
        jLabel6 = new javax.swing.JLabel();
        ResultadoOrdenado = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        jTextField1 = new javax.swing.JTextField();
        jLabel8 = new javax.swing.JLabel();
        jTextField2 = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setText("Ordenador de Vetores:");

        jLabel2.setText("Numero para ordenar a sua lista (Limite 10 valores):");

        jLabel3.setText("Obs: para separar os valores use espaço ex: 10 20");

        jLabel4.setText("Valores sem ordenação:");

        Resultado.setFont(new java.awt.Font("Tahoma", 1, 11));
        Resultado.setForeground(new java.awt.Color(255, 0, 0));
        Resultado.setText("sem valores");

        jButton1.setText("MergeSort");

        jLabel5.setText("Ordenar utilizando os Métodos:");

        QuickSorte.setText("QuickSort");
        QuickSorte.setMaximumSize(new java.awt.Dimension(83, 23));
        QuickSorte.setMinimumSize(new java.awt.Dimension(83, 23));
        QuickSorte.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                QuickSorteActionPerformed(evt);
            }
        });

        jLabel6.setText("Valores ordenados :");

        ResultadoOrdenado.setFont(new java.awt.Font("Tahoma", 1, 11));
        ResultadoOrdenado.setForeground(new java.awt.Color(255, 0, 0));
        ResultadoOrdenado.setText("sem valores");

        jLabel7.setText("Valor Inicial");

        jTextField1.setText("0");

        jLabel8.setText("Valor Final:");

        jTextField2.setText("10");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(119, 119, 119)
                        .addComponent(jLabel1))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(Vetor, javax.swing.GroupLayout.PREFERRED_SIZE, 241, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jLabel2))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jLabel3))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(27, 27, 27)
                                .addComponent(QuickSorte, javax.swing.GroupLayout.PREFERRED_SIZE, 92, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(jLabel5)
                            .addComponent(jLabel6)
                            .addComponent(ResultadoOrdenado)
                            .addComponent(Resultado)))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                .addComponent(jTextField1, javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(jLabel7, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                            .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.LEADING))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jTextField2)
                            .addComponent(jLabel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
                .addContainerGap(125, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addGap(25, 25, 25)
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 14, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(Vetor, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel7)
                    .addComponent(jLabel8))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(jLabel4)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(Resultado)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel5)
                .addGap(8, 8, 8)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButton1)
                    .addComponent(QuickSorte, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jLabel6)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(ResultadoOrdenado)
                .addContainerGap(31, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void QuickSorteActionPerformed(java.awt.event.ActionEvent evt) {                                           
    dados.v = Integer.parseInt(Vetor.getText());

    
    }                                          

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new OrdenadorVetores().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton QuickSorte;
    private javax.swing.JLabel Resultado;
    private javax.swing.JLabel ResultadoOrdenado;
    private javax.swing.JTextField Vetor;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration                   

}
Nesse Layout acima minha ideia seria a pessoa colocaria 10 valores ( que entraria em um vetor.. ) Nas opcoes Valor INicial e Final seria o contador dos Metodos que criei ( onde o 0 seria inicio e o 10 o fim do vetor ) No Lugar de Valores sem ordenação iria surgir os valores que a pessoa digito no inicio. Ao Clicar em um dos botoes como exemplo: MargeSort ou QuickSorte ele puxaria o metodo executaria e mostraria abaixo o valores Ordenados ( utilizando um desses metodos ). Abaixo já fiz o Metodo quickSort.
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package vetores;

import java.util.Scanner;

/**
 *
 * @author Crazy
 */
public class QuickSort {

   // public static int v[]={1,13,5,8,2,3,4,10,9,12,11};
    public static int []v=new int[10];
    public static Scanner entrada=new Scanner(System.in);
    public static int i;
    static QuickSort obj= new QuickSort();

    /*
    public static void main(String[] args)
    {

     System.out.println("Digite os valores do vetor");
     for(i=0;i<v.length;i++)
     {
         v[i]=entrada.nextInt();
     }


     System.out.println("Dados sem ordenação"); //msg
        for (int ni:v) //for aprimorado para mostrar valores que estao no Vetor Inicial
        {
            System.out.print(ni+ "  ");// msg
        }

        obj.quickSort(v, 0, v.length-1);

        System.out.println("\nDados Ordenados pelo QuickSort"); //ordenado
        for (int ni=0;ni < v.length;ni++) // mensagem para mostrar como que ficou a ordenaçao
        {
            System.out.print(v[ni]+ " ");

        }
       System.out.println();

    }*/
     
/*
    public static void main(String[] args)
    {

        QuickSort qs = new QuickSort(); //inicio um Objeto da classe mesmo
        System.out.println("Dados sem ordenação"); //msg
        for (int ni:v) //for aprimorado para mostrar valores que estao no Vetor Inicial
        {
            System.out.print(ni+ "  ");// msg
        }
        qs.quickSort(v, 0, 10); //vou adicionar no metodo da nossa classe Primeiro o VETOR, Inicio, e o tamanho final
        System.out.println("\nDados Ordenados pelo QuickSort"); //ordenado
        for (int ni=0;ni < v.length;ni++) // mensagem para mostrar como que ficou a ordenaçao
        {
            System.out.print(v[ni]+ " ");
            
        }
       System.out.println();
    }
*/

    public void setVetor(int[] vetor)
    {

            obj.quickSort(vetor, 0,10);

    }

    public void quickSort (int[] c, int a, int j) // vai receber os valores adicionados la em cima
    {
        int i=a, b=j,h; //variavel a = o valor 0 de la em cima, b=fim(tamanho vetor), h auxiliar
        int x=c[a]; //x vai receber o vetor que definimos la em cima

        do
        {

            while (c[i]<x)//a posicao do vetor for menor que a primeira posição do vetor
                i++; //i vai acumular que no caso ira para segunda casa no vetor
            while (c[b]>x) // enqnt a psicao do vetor que ta em B(final) for maior que o valor da inicial
                b--;//ele vai reduzir para voltar.
            if (i<=b) //se i < b exemplo:  1 < 3
            {
                h=c[i];
                c[i]=c[b];
                c[b]=h;
                i++;
                b--;
            }
        }while (i<=b);

        if (a<b)
            quickSort(c,a,b);
        if (i<=j)
            quickSort(c,i,j);
    }
}

A Minha duvida é a seguinte como que vou fazer para realizar esse interligamento ?
Receber os valores no vetor , apos isso mostra os valores sem ordem , depois ao clicar o botao organizar os valores utilizando algum dos metodos.
Agradeço a ajuda :)

6 Respostas

Mephy
  • poste interfaces gráficas geradas com print, não código, por favor
  • atributos objetos da própria classe geram um “loop infinito” na RAM. Mude as referências pra algo como:

public void setVetor(int[] vetor){ this.quickSort(vetor, 0, 10); // this já está falando do próprio objeto da classe QuickSort }

  • no listener da classe gráfica (do botão desejado, claro), instancie um novo objeto da classe QuickSort e use seus métodos públicos
  • se entendi bem, você quer algo do método quickSort() (o vetor ordenado), então deixe ele com um retorno ou faça um método get para um atributo e modifique o atributo através desse método quickSort()
C

Desculpe, abaixo coloquei a Imagem:

Não entendi muito bem como fazer , poderia da uma pequena Prévia de como iria fazer isso?

Agradeço já pela ajuda…

Mephy

listener do botão (evento de clicar)

QuickSort qs = new QuickSort(); // sua classe QuickSort precisa de um construtor válido int[] vet = new int [10]; // ou qualquer tipo que você quiser String s = seutextfield.getText(); // faz um for ai pra converter a String num vetor de inteiros, lembre-se do try-catch caso a entrada seja inválida qs.setVetor(vet); // monta alguma coisa pra mostrar esse vetor, caixa de diálogo, sei lá, com loop também

o problema agora é sua classe QuickSort, que não tem construtor, tem um método que dá auto-call sem sentido, guarda parâmetros em outras variáveis, converte parâmetros para tipos iguais, e método void que não mexe com atributos

devia tentar entender melhor o que você quer fazer antes de simplesmente jogar linhas de código no compilador sem saber o que elas fazem

C

rsrs
Como falei to iniciando e to na luta pra aprender.
To dando a cara ai pra ve se consigo realizar algo valeu pelas dicas vou ve o que consigo fazer.


Estou com uma duvida no caso de como eu vo recuperar os valores digitado na primeira Linha, e armazena elas nos vetores para realizar os metodos

C

Mephy fiz dessa maneira..

BubbleSort bs = new BubbleSort();
       String valor = Vetor.getText();
       int[] valorInt = new int[valor.length()];  
          
        for (int i = 0; i < valorInt.length; i++) {  
            valorInt[i] = Integer.parseInt(valor.substring(i, i+1));  
            //System.out.println(valorInt[i]);  
        }  
        bs.Bolha(valorInt);
        Resultado.setText(String.valueOf(valor));
        ResultadoOrdenado.setText(String.valueOf(bs.BolhaAprimorado(valorInt)));

Só que nessa ultima linha está dando erro, criei um novo metodo para realizar uma ordenação.
Mas meu erro está na hora que deveria mostrar a Mensagem dos valores Ordenados.
;s

Esse abaixo:
public static void BolhaAprimorado (int v[])
    {
         for (int i = v.length; i>=0; i--) //controlar o vetor pra ve qnts vezes passara
         {
             boolean estaOrdenado = true; //valor para ver se o vetor ja esta ordenado
             //repeticao que vai organizar o vetor
              for (int j = 1; j < i; j++)
              {
                  //Se o valor atual for maior que o proximo troca as posicoes os valores.
                  if (v[j - 1] > v[j])
                  {
                    int aux = v[j];
                    v[j] = v[j - 1];
                    v[j - 1] = aux;
                    /* Identifica que entrando aqui o Valor[x]nao esta no lugar certo e volta
                     a Repetir*/
                    estaOrdenado = false;
                  }

              }
             /* Se o vetor acima nao entrar nenhuma vez no bloco IF entende-se
              que os valoes estao ordenado e com isso da um BREAK e para a execução*/
             if(estaOrdenado)
                 break;
         }

    }
Mephy

cara, sugiro tentar aprender a usar a ferramenta debugger (pelo código que você postou do layout auto-generated, suponho que seja o NetBeans, que já possui essa ferramenta)
ele mostra linha a linha o que está acontecendo com cada variável, o que facilita o entendimento do que o código está fazendo

Criado 10 de abril de 2011
Ultima resposta 10 de abr. de 2011
Respostas 6
Participantes 2