Bom dia,
Estou desenvolvendo um trabalho e explicando bem rápido ele tem que receber uma palavra e fazer isso:
Ex.
texto
te ex xt to
Fiz isso já e consegui colocar dentro de um vetor, pois vou comparar esse vetor com outro para fazer o cálculo de n-gram para calcular a similaridade entre as palavras.
Com o código abaixo eu consegui:
[code]System.out.print("Informe a primeira palavra: ");
wordOne = leT.nextLine();
for(cont = 0; cont < wordOne.length()-1; cont++){
wordAux = wordOne.charAt(cont);
wordFinalOne += wordAux;
if(cont < wordOne.length()){
wordAux = wordOne.charAt(cont+1);
wordFinalOne += wordAux;
}
wordFinalOne += " ";
}
String vWordOne[] = wordFinalOne.split(" ");
for(cont = 0; cont < vWordOne.length; cont++){
System.out.print(vWordOne[cont]+" ");
}[/code]
Eu por curiosidade minha já estudei um pouco de orientação a objetos onde criava alguns métodos e realizava algumas tarefas.
A minha dúvida é, como posso transformar esse código em um método para que receba uma String(palavra) e retorne um vetor conforme está a saída desse código e como vou chamar ele quando precisar?
Desde de já agradeço.
public String[] metodo(String wordOne) {
for(cont = 0; cont < wordOne.length()-1; cont++){
wordAux = wordOne.charAt(cont);
wordFinalOne += wordAux;
if(cont < wordOne.length()){
wordAux = wordOne.charAt(cont+1);
wordFinalOne += wordAux;
}
wordFinalOne += " ";
}
String vWordOne[] = wordFinalOne.split(" ");
for(cont = 0; cont < vWordOne.length; cont++){
System.out.print(vWordOne[cont]+" ");
}
return vWordOne;
}
você irá invocar o metedo passando uma palavra:
metodo(palavra);
e terá um retorno de vWordOne;
Como fica esse código abaixo adaptando para utilizar esse método?
import java.util.Scanner;
public class Teste {
public static void main(String[] args) {
String wordOne, wordTwo, wordFinalOne, wordFinalTwo;
char wordAux;
int cont, contIn, contDgCompartilhado;
Scanner leT = new Scanner(System.in);
wordFinalOne = "";
//recebendo a primeira palavra
System.out.print("Informe a primeira palavra: ");
wordOne = leT.nextLine();
for(cont = 0; cont < wordOne.length()-1; cont++){
wordAux = wordOne.charAt(cont);
wordFinalOne += wordAux;
if(cont < wordOne.length()){
wordAux = wordOne.charAt(cont+1);
wordFinalOne += wordAux;
}
wordFinalOne += " ";
}
String vWordOne[] = wordFinalOne.split(" ");
for(cont = 0; cont < vWordOne.length; cont++){
System.out.print(vWordOne[cont]+" ");
}
System.out.print("\n");
//recebendo a segunda palavra para comparação
System.out.print("Informe a segunda palavra: ");
wordTwo = leT.nextLine();
wordFinalTwo = "";
for(cont = 0; cont < wordTwo.length()-1; cont++){
wordAux = wordTwo.charAt(cont);
wordFinalTwo += wordAux;
if(cont < wordTwo.length()){
wordAux = wordTwo.charAt(cont+1);
wordFinalTwo += wordAux;
}
wordFinalTwo += " ";
}
String vWordTwo[] = wordFinalTwo.split(" ");
for(cont = 0; cont < vWordTwo.length; cont++){
System.out.print(vWordTwo[cont]+" ");
}
System.out.print("\n");
contIn = 0;
contDgCompartilhado = 0;
for (cont = 0; cont < vWordOne.length; cont++){
for(contIn = 0; contIn < vWordTwo.length; contIn++){
if (vWordOne[cont].equals(vWordTwo[contIn])){
contDgCompartilhado++;
}
}
}
System.out.println(contDgCompartilhado);
}
}
É a mesma coisa que o junior postou porem naquele caso vc tem 1 chamada neste caso terá 2 chamadas:
Scanner leT = new Scanner(System.in);
System.out.print("Informe a primeira palavra: ");
String word = leT.nextLine();
String []vWordOne = metodo(word);
System.out.print("Informe a segunda palavra: ");
word = leT.nextLine();
String []vWordTwo = metodo(word);
System.out.print("\n");
contIn = 0;
contDgCompartilhado = 0;
for (cont = 0; cont < vWordOne.length; cont++){
for(contIn = 0; contIn < vWordTwo.length; contIn++){
if (vWordOne[cont].equals(vWordTwo[contIn])){
contDgCompartilhado++;
}
}
}
System.out.println(contDgCompartilhado);
Ele está dando apenas um erro agora.
import java.util.Scanner;
public class Teste {
String word, wordFinalOne;
char wordAux;
int cont;
public String[] metodo(String word) {
wordFinalOne = "";
for(cont = 0; cont < word.length()-1; cont++){
wordAux = word.charAt(cont);
wordFinalOne += wordAux;
if(cont < word.length()){
wordAux = word.charAt(cont+1);
wordFinalOne += wordAux;
}
wordFinalOne += " ";
}
String vWordOne[] = wordFinalOne.split(" ");
for(cont = 0; cont < vWordOne.length; cont++){
System.out.print(vWordOne[cont]+" ");
}
return vWordOne;
}
public static void main(String[] args) {
int cont, contIn, contDgCompartilhado;
String word;
Scanner leT = new Scanner(System.in);
System.out.print("Digite a primeira palavra: ");
word = leT.nextLine();
String []vWordOne = metodo(word);
System.out.print("Digite a primeira palavra: ");
word = leT.nextLine();
String []vWordTwo = metodo(word);
contIn = 1;
contDgCompartilhado = 0;
for (cont = 0; cont < vWordOne.length; cont++){
for(contIn = contIn; contIn < vWordOne.length; contIn++){
if (vWordOne[cont].equals(vWordOne[contIn])){
contDgCompartilhado++;
}
}
contIn += 1;
}
System.out.println(contDgCompartilhado);
}
}
O erro está dizendo:
[color=red]Cannot make a static reference to the non-static method metodo(String) from the type Teste[/color]
Para corrigir esse erro, declarei as variáveis dentro do método e mudei ele para Static.
Mas isso não é viável pois vou precisar usar essas variáveis de novo em outro método.
Consegui resolver:
Osvaldo_berg w = new Osvaldo_berg();
System.out.print("Digite a primeira palavra: ");
word = leT.nextLine();
String []vWordOne = w.metodo(word);
System.out.print("Digite a segunda palavra: ");
word = leT.nextLine();
String []vWordTwo = w.metodo(word);