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?
Põe o código aí p darmos uma olhada…
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:
[code]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";
}
}[/code]
Ter uma variavel global nao resolve o meu problema pq a variavel que preciso deve ser do tipo BufferedReader ,
mas hein…???
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…
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
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();
bufferedreader necessita de argumento no construtor
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
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 ();
}
}
meu problema e conseguir concatenar a linha de baixo com a de cima, no metodo editaTag