Problemas com variáveis

11 respostas
hcbelias

Tenho uma variável que é delcarada e inicializada no main.
E o main chama um metodo, neste metodo eu preciso de um condicional que necessita da variavel que e declarada la no main, como posso usar essa varivel sem ser como argumento do metodo?Tem como?

11 Respostas

adriano_si

Põe o código aí p darmos uma olhada…

olhaomarcosaqui

Já que você não quer passar como parametro do metodo, a melhor solução é declarar a variavel no escopo da classe, pra ficar algo parecido com isso:

public class teste {
	static String varialvelGlobal;

	public static void main(String args[]){
		mudaValor();
		System.out.print(varialvelGlobal);
	}
	public static void mudaValor(){
		varialvelGlobal="isso é uma variavel com escopo de classe";
	}
}
hcbelias

Ter uma variavel global nao resolve o meu problema pq a variavel que preciso deve ser do tipo BufferedReader ,

mchiareli

mas hein…???

Giulliano

As varíaveis não locais podem ser de qualquer tipo cara…vc só precisa instanciala para que ela não seja nula e usar static se precisar mesxer nela atráves de um método estático…

hcbelias

o problema que para instacia-la , ela dependende duma porcao de variaveis, se for p ser variavelk global, todas variaveis que resultam na construcao da BufferedReader ndevem ser globais tbm, ai axo que fica muita bagunca

Giulliano

Eu acho que vc esta complicando uma situação muito fácil

Se vc usar uma varíavel global isso significa que vc pode acessa-la de qualquer parte da sua classe enquanmto que as locais somente dentro do método onde foi declarado…

logo varíaveis locais conversão com globais e vice-versa…

instância de uma varíavel global

BufferedReader bf = new BufferedReader();

hcbelias

bufferedreader necessita de argumento no construtor

evandroshx

Cara, vc não quer passar como argumento mas tb não pode trabalhar com variáveis globais…tá ficando difícil hein.

Uma solução (não aconselhável) é vc trabalhar com os dois tipos de variáveis, fica estranho mas vc não precisa passar como argumento.

Tipo, crie uma variavel global e uma outra local no método main(), aí, depois de fazer tudo o que vc quer com essa variável local, atribui o valor dela para a global (não esquecendo de inicializar a global é claro) e no método que vc não pode receber como argumento, use a global.

Isso é uma tremenda gambiarra…nem sei porque estou dizendo isso! Mas funciona.

O melhor mesmo é vc colocar o seu código aí pra gente ver, falow.

[]s

hcbelias

package nequim;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.LineNumberReader;

import java.io.PrintWriter;

public class Main
{

public Main ()
{
}

public static String editaExplore (String linha)
{
    String str=linha;
    for (int i=0;i<str.length ()-6;i++)
    {
        if (str.regionMatches (true,i,"Explore",0,7))
        {//Verifica se na linha há explore
            StringBuffer strbuffer=new StringBuffer (str);
            str=strbuffer.insert (i+7,"^p").toString ();
        }
    }
    return str;
}//Testado!!

public static String editaMore (String linha)
{
    String str=linha;
    for (int i=0;i<str.length ()-3;i++)
    {
        if (str.regionMatches (true,i,"more",0,4))
        {//Verifica se na linha há explore
            StringBuffer strbuffer=new StringBuffer (str);
            str=strbuffer.insert (i+4,"^p").toString ();
            
        }
        
    }
    
    return str;
}//Testado!!

public static String editaTag (String linha)//OK!
{
    String temp="";
    String saida="";
    String str=linha;
    String exp1="HREF";
    String exp2="href";
    int cont, abre=str.indexOf ("<"), fecha=str.indexOf (">"),
            ultimoabre=str.lastIndexOf ("<"), ultimofecha=str.lastIndexOf (">");
            
    cont=fecha;
    
    if (ultimoabre>ultimofecha)
    {
        
       //Aqui devo concatenar a string da linha de baixo, com a linha atual
        
        
        
        
    }
    
    
    if (abre<0 | fecha<0)
    {
        saida=str;
    }
    else
    {
        for (int i=0;i<ultimoabre+1;)
        {
            if (str.startsWith ("<",i))
            {
                //comeca a tag, deve-se verificar a tag ,e formata-la ou nao
                String aux=("");
                if (fecha==(str.length ()-1))
                {
                    
                    aux=str.substring (i);
                    
                }
                else
                {
                    
                    
                    aux=str.substring (i,str.indexOf (">",i)+1);
                }//Separa a subtring a ser analisada
                String verifica=aux;
                
                if ((verifica.matches (".*"+exp1+".*")) | (verifica.matches (".*"+exp2+".*")))
                {
                    //nao faz nada
                }
                else
                {
                    aux=("<|>");
                }
                saida=saida.concat (aux.toString ());
                abre=str.indexOf ("<",i);
                fecha=str.indexOf (">",i);
                i=str.indexOf (">",i)+1;
                
                
                
            }
            else
            {
                //nao ha tag
                saida=saida.concat (str.substring (i,i+1));
                
                
                abre=str.indexOf ("<",i);
                fecha=str.indexOf (">",i);
                i++;
            }
            
        }
        
    }
    
    return saida;
}//Testado!!

public static Boolean verificaLinha (String linha)//OK!
{
    Boolean res=false;
    String exp="Similar";
    String txt=linha;
    if (txt.matches (".*"+exp+".*"))
        res=true;
    return res;
    
}

public static void main (String[] args) throws IOException
{
    
    int num;
    File pasta=new File ("/home/henrique/programa");
    File entrada=new File (pasta,"entradatst.txt");
    File saida=new File (pasta,"saidatst.txt");
    FileReader fr=new FileReader (entrada);
    FileWriter fw=new FileWriter (saida);
    PrintWriter pw=new PrintWriter (fw);
    BufferedReader br=new BufferedReader(fr);     
    String linha=br.readLine ();
    StringBuffer s1=new StringBuffer ("</div>");
    Boolean fim=false;
    Boolean sair=false;
    int a=1;
    
    
    do
    {
        if (linha.length ()<1){
            
            a=a+1;
            System.out.printf ("Linha : %d \n",a);
            linha=br.readLine ();
            continue;
        }
        if (linha!=null){
        linha=editaExplore (linha);
        linha=editaMore (linha);
        
        linha=editaTag (linha);
        pw.println (linha);
        }
        a=a+1;
        System.out.printf("Linha : %d\n",a);
        linha=br.readLine ();
        
        
        
    }
     while (!linha.contentEquals (s1));
    
    linha=editaTag (linha);
    pw.println (linha);
    linha=br.readLine ();
    while (true) //mantem a parte de ligantes identicos
    {
        pw.println (linha);
        linha=br.readLine ();
        String str=linha;
        sair=verificaLinha (str);
        //condicional para sair do while
        //metodo verificador de linha
        if (sair)
            break;
        
    }
    
    
    
    fr.close ();
    fw.close ();
    pw.close ();
}

}

hcbelias

meu problema e conseguir concatenar a linha de baixo com a de cima, no metodo editaTag

Criado 20 de julho de 2007
Ultima resposta 20 de jul. de 2007
Respostas 11
Participantes 6