Azərbaycan dili Bahasa Indonesia Bosanski Català Čeština Dansk Deutsch Eesti English Español Français Galego Hrvatski Italiano Latviešu Lietuvių Magyar Malti Mакедонски Nederlands Norsk Polski Português Português BR Românã Slovenčina Srpski Suomi Svenska Tiếng Việt Türkçe Ελληνικά Български Русский Українська Հայերեն ქართული ენა 中文
Subpage under development, new version coming soon!

Subject: Programação

2009-04-18 20:08:49
ahuahuauha... ainda se diverti fazendo isso...

@rac2: meu fi vlw!! ta perfeito o chat!!!

agora vem a sessão de dúvidas

a primeira eh: esses substrings pq um tem (6) outro (9) outro (7)? entendi isso não
2009-04-19 03:33:20
ferdam: HEHEHE

eiro: texto.substring(índice i) é uma operação de java.lang.String para pegar o subtexto em texto que vem a partir de i. eu uso no nosso programinha para pegar a mensagem após um comando. ao bater, por exemplo, "/exit mensagem de saida", um cliente envia a msg pro servidor, que aceita o comando, processa, envia o broadcast para informar os outros da saída, e depois envia um /exit mensagem de saída de volta para o cliente, para que o mesmo realize as operações de desconexão (fechar socket, a frame, etc...). além disso, o cliente e os outros recebem a informação da seguinte forma: *** rac2 saiu (mensagem de saída).

para pegar apenas "mensagem de saída", vamos analisar os índices dos caracters do comando completo:
'/' - 0
'e' - 1
'x' - 2
'i' - 3
't' - 4
' ' - 5
'm' - 6
'e' - 7
'n' - 8
e por aí vai...

para pegar o texto após "/exit " (espaço incluso), eu uso substring(6), com o índice 6, que retorna "mensagem de saída". ou seja, o índice depende do comando e do que vem depois (/userlist nao pode ter nada depois, ou será um comando inválido). /exit é 6, /ERRO:COM (para processar comandos de erro) é 9, etc...
2009-04-19 17:16:06
hmmm.. entendi!!!

como faz pro programa virar um aplicativo?(pra eu usar sem ser pelo Java)
2009-04-19 18:56:58
cara, isso o eclipse faz automaticamente... dá uma pesquisada que tu acha (como construir um .jar a partir das tuas classes).

ah, precisa fazer uma modificação no código. um dos requisitos do teu professor é que nick seja único e seja colocado no início da conexão. faz as seguintes alterações:

em Cliente.java:
.) onde tem "String fromserver", muda para:
String fromServer, nickname = JOptionPane.showInputDialog("Informe o seu nick: ");

if(nickname != null)
out.println("/nick " + nickname); //se o usuario digitou algum nick, muda o nick dele
else
out.println("/userlist"); //se não, exibe apenas a lista de usuários

em Servidor.java:
.) adiciona um novo método:
public void changeNickAttemp(ThreadConexao origem, String novoNick) {
boolean jaExiste = false;
Iterator<ThreadConexao> itOrigem;
itOrigem = listaThreads.iterator();
// TODO: validação de nick (exemplo abaixo):
boolean nickInvalido = false;
if (novoNick == null || novoNick.equals("") || novoNick.contains(" ")) {
// nick não pode ser nenhum acima espaço
nickInvalido = true;
}
if (nickInvalido) {
origem.getPrintWriterOut().println("/ERRO:COMNick '" + novoNick + "' é inválido " +
"- escolha um nick válido. Seu nick atual é: "
+ origem.getUser().getNick());
origem.getPrintWriterOut().println("/ERRO:COMDigite: /nick <novo nick> para mudar.");

} else {
while (itOrigem.hasNext()) {
if (itOrigem.next().getUser().getNick().equals(novoNick)) {
jaExiste = true;
break;
}
}
if (jaExiste) {
// nick já existente - não muda o nick
origem.getPrintWriterOut().println(
"/ERRO:COMNick '" + novoNick
+ "' já está em uso. Seu nick atual é: "
+ origem.getUser().getNick());
origem.getPrintWriterOut().println(
"/ERRO:COMDigite: /nick <novo nick> para mudar.");
} else {
// nick pode ser mudado
String oldNick = origem.getUser().getNick();
origem.getUser().setNick(novoNick);

sendBroadCast(origem, "/msg *** " + oldNick
+ " mudou de nick para: " + origem.getUser().getNick());
origem.getPrintWriterOut().println(
"/nick " + origem.getUser().getNick());
sendUserList(origem);
}
}

}

em ThreadConexão.java:
.) procura pelo "else if (inputLine.startsWith("/nick "))" e muda ele para o que está abaixo:
else if (inputLine.startsWith("/nick ")) {
parent.changeNickAttemp(this, inputLine.substring(6));
continue; //pula o laço - o servidor vai tratar a mudança de nick
}

aí todos os requisitos vão estar implementados :)
(edited)
2009-04-19 19:46:13
hmm.. ok.. vou da uma pesquisada

jah ajeitei as parada ai ;D

ei.. a barra de rolagem como faz?
2009-04-19 20:17:29
em FrameCliente.java

1- cria uma variavel global "JScrollPane spArea = null;"
2- no método getJContentPane(), muda jContentPane.add(getTxfArea(), null) para jContentPane.add(getSpArea(), null);
3- adiciona o método getSpArea()
public JScrollPane getSpArea() {
if (spArea == null) {
spArea = new JScrollPane( getTxfArea() );
spArea.setBounds(new Rectangle(1, 1, 578, 338));
spArea.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
spArea.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
}
return spArea;
}

4- no método getTxfArea(), comenta a seguinte linha:
//txfArea.setBounds(new Rectangle(1, 1, 578, 338));
2009-04-20 15:54:58
hmm perfeito :)
2009-04-24 22:18:15
aee tirei 10!! vlw!!( na verdade nao foi 10, foi 5, na outra prova escrita tirei 3,5, fikei com 8,5 entao :))


public void changeNickAttemp(ThreadConexao origem, String novoNick) {
boolean jaExiste = false;
Iterator<ThreadConexao> itOrigem;
itOrigem = listaThreads.iterator();
// TODO: validação de nick (exemplo abaixo):
boolean nickInvalido = false;
if (novoNick == null || novoNick.equals("") || novoNick.contains(" ")) {
// nick não pode ser nenhum acima espaço
nickInvalido = true;
}
if (nickInvalido) {
origem.getPrintWriterOut().println("/ERRO:COMNick '" + novoNick + "' é inválido " +
"- escolha um nick válido. Seu nick atual é: "
+ origem.getUser().getNick());
origem.getPrintWriterOut().println("/ERRO:COMDigite: /nick <novo nick> para mudar.");

} else {
while (itOrigem.hasNext()) {
if (itOrigem.next().getUser().getNick().equals(novoNick)) {
jaExiste = true;
break;
}
}
if (jaExiste) {
// nick já existente - não muda o nick
origem.getPrintWriterOut().println(
"/ERRO:COMNick '" + novoNick
+ "' já está em uso. Seu nick atual é: "
+ origem.getUser().getNick());
origem.getPrintWriterOut().println(
"/ERRO:COMDigite: /nick <novo nick> para mudar.");
} else {
// nick pode ser mudado
String oldNick = origem.getUser().getNick();
origem.getUser().setNick(novoNick);

sendBroadCast(origem, "/msg *** " + oldNick
+ " mudou de nick para: " + origem.getUser().getNick());
origem.getPrintWriterOut().println(
"/nick " + origem.getUser().getNick());
sendUserList(origem);
}
}

}

esse método não está dando certo, tu testou ai? eu tentei, tentei modificar e nada

o prof disse q ia colocar la no site dele o codigo mas nem colocou ainda
2009-04-24 22:21:46
aqui funfa perfeitamente hehe

se vc quiser o workspace, manda o teu email que eu zipo e te envio
2009-06-11 21:25:31
to d volta!!! o assunto agora é estrutura de dados(pilha, fila, etc)

entrou um prof novo e ele mandou um trabalho pra gente fazer todas as estruturas sem nem ensinar o codigo

bom tem essa interface q deve ser o principal: (dei uma ajeitada pra ficar menor >)

==================================================

public class GUI extends JFrame {

JLabel lbPilha = new JLabel(" Pilha"); JLabel lbFila= new JLabel(" Fila");
JLabel lbVetor = new JLabel(" Vetor"); JLabel lbLista = new JLabel(" Lista");
JLabel lbSequencia = new JLabel(" Sequência"); JTextField txPilha = new JTextField();
JTextField txFila = new JTextField(); JTextField txVetor = new JTextField();
JTextField txLista = new JTextField(); JTextField txSequencia = new JTextField();
JButton btOk = new JButton("testar");

public GUI () {
super("Estruturas de dados");
setLayout(new GridLayout(6, 2)); setSize(240, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
inicializa(); setVisible(true);
}

private void inicializa() {
add(lbPilha); add(txPilha); add(lbFila); add(txFila); add(lbVetor); add(txVetor);
add(lbLista); add(txLista); add(lbSequencia); add(txSequencia); add(new JLabel());
add(btOk);

btOk.addActionListener(new ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent arg0) {
double testes = 0;
double total = 5;
try {
if (!txPilha.getText().equals("")) {
Pilha pilha = (Pilha) Class.forName(txPilha.getText()).newInstance();
testes += Teste.testePilha(pilha);
}
if (!txFila.getText().equals("")) {
Fila fila = (Fila) Class.forName(txFila.getText()).newInstance();
testes += Teste.testeFila(fila);
}
if (!txVetor.getText().equals("")) {
Vetor vetor = (Vetor) Class.forName(txVetor.getText()).newInstance();
testes += Teste.testeVetor(vetor);
}
if (!txLista.getText().equals("")) {
Lista lista = (Lista) Class.forName(txLista.getText()).newInstance();
testes += Teste.testeLista(lista);
}
if (!txSequencia.getText().equals("")) {
Sequencia sequencia = (Sequencia) Class.forName(txSequencia.getText()).newInstance();
testes += Teste.testeSequencia(sequencia);
}
double pts = 3 * testes / total;
JOptionPane.showMessageDialog(null, "Você ganhou " + pts + " pontos");
}
catch (ClassNotFoundException e) {
JOptionPane.showMessageDialog(null, "Não encontrou a classe: " + e.getMessage());
}
catch (ClassCastException e) {
JOptionPane.showMessageDialog(null, "Classe incompatível: " + e.getMessage());
}
catch (Exception e) {
e.printStackTrace();
}}});}
public static void main (String[] args) {
new GUI();
} }

============================================================

criou esta interface pra ajudar mas eu nao entendi como se usa

==================================================

public interface Posicao<T> {
T get();
void set(T e);
Posicao<T> getProximo();
void setProximo(Posicao<T> p);
Posicao<T> getAnterior();
void setAnterior(Posicao<T> p);
}

=======================================

colocou essa interface nao sei pra q.. seria a principal.. mas nao tem a GUI? ai eu nao sei se eh pra implementar coisas ou nao

Todas as estruturas devem ter um método teApresenta() que deve mostrar o nome do autor e da estrutura. Ex.:

class PilhaRenato implements Pilha {
public void teApresenta() {
System.out.println("Sou uma pilha do Renato!");
}
}

=======================================

interface Estrutura {
void teApresenta();
int size();
boolean isEmpty();
}

======================================

me da uma luuuuz nao sei por onde começar :P
2009-06-11 21:28:55
public interface Lista<T> extends Estrutura {
boolean isFirst(Posicao<T> p);
boolean isLast(Posicao<T> p);
Posicao<T> first();
Posicao<T> last();
Posicao<T> before(Posicao<T> p);
Posicao<T> after(Posicao<T> p);
void swapElements(Posicao<T> p, Posicao<T> q);
T replaceElement(Posicao<T> p, T e);
void insertFirst(T e);
void insertLast(T e);
void insertBefore(Posicao<T> p, T e);
void insertAfter(Posicao<T> p, T e);
void remove(Posicao<T> p);
}

==========================================

public interface Fila<T> extends Estrutura {
void insert(T e);
T remove();
T front();
}

========================================

eh pra eu mudar alguma coisa nesses codigos? oq eu tenho q fazer???

unica coisa q eu tentei fazer foi isso(sei que viajei na maionese)

=================================================

public interface Pilha<T> extends Estrutura {
void push(T e);
T pop();
T top();

public void Inserir(int e)
{
Pilha<T> = e
T++;
}
public void pop()
{
Pilha<T> = N;
Pilha<T> = null
return N;
}
}
2009-06-12 17:00:44
up
2009-06-13 03:08:12
Vai ter que esperar o rac2 voltar do feriado ! :)
2009-06-13 04:02:22
ok... tenho ate proxima semana
2009-06-13 06:23:30
Eu tenho um código de uma estrutura em pilha, tá bem diferente desse ai, se quiser é só falar. Depois vou ver como calma esse exemplo que vc passou, a principio não entendeu bem tb não :)
2009-06-13 06:52:06
coloca aew, vamos juntar as idéias :P

meu professor eu acho que tem 25 anos, deve está no meio da formação, parece um rapper falando(gesticulando), ninguem gosta dele, jah fizeram um abaixo-assinado pra tirá-lo, mas não tem quem colocar