문제
나는 UVA의 편집 단계 사다리를 Programming-Challenges.com이라는 UVA 하위 사이트에서 해결하고 있지만, 입력을 테스트 해야하는 모든 형식을 얻지 못했기 때문에 단순히 샘플 입력을 가져갔습니다. 텍스트 파일로 내 코드를 테스트했습니다. 이와 같이:
import java.io.*;
import java.util.*;
class Levenshtein {
private static int minimum(int a, int b, int c) {
if(a<=b && a<=c)
return a;
if(b<=a && b<=c)
return b;
return c;
}
public static int computeLevenshteinDistance(String str1, String str2) {
return computeLevenshteinDistance(str1.toCharArray(),
str2.toCharArray());
}
private static int computeLevenshteinDistance(char [] str1, char [] str2) {
int [][]distance = new int[str1.length+1][str2.length+1];
for(int i=0;i<=str1.length;i++)
distance[i][0]=i;
for(int j=0;j<=str2.length;j++)
distance[0][j]=j;
for(int i=1;i<=str1.length;i++)
for(int j=1;j<=str2.length;j++)
distance[i][j]= minimum(distance[i-1][j]+1,
distance[i][j-1]+1,
distance[i-1][j-1]+
((str1[i-1]==str2[j-1])?0:1));
return distance[str1.length][str2.length];
}
public static void main(String args[]){
ArrayList<String> theWords = new ArrayList<String>();
try {
String ruta="entradaLevenshtein.txt";
File myFile = new File (ruta);
FileReader fileReader = new FileReader(myFile);
BufferedReader reader = new BufferedReader(fileReader);
String line = null;
while ((line=reader.readLine())!=null){
System.out.println(line);
theWords.add(line);
}
reader.close();
}
catch (IOException ex){
ex.printStackTrace();
}
{}
// todo esto sólo para iniciar el arreglo
// ahora vienen las llamadas a Levenstein y las comparaciones
int maxEdit=0;
int actualEdit=0;
int wordsIndex1 =0, wordsIndex2=0;
while (wordsIndex1<= theWords.size())
{
while (wordsIndex2<= theWords.size()-1){
actualEdit=computeLevenshteinDistance(theWords.get(wordsIndex1),theWords.get(wordsIndex2));
if (actualEdit>maxEdit){maxEdit=actualEdit;}
wordsIndex2++;
}
wordsIndex1++;
}
System.out.println(maxEdit+1);
}
}
내 입력 파일은 다음과 같습니다.
cat
dig
dog
fig
fin
fine
fog
log
wine
코드를 다음 패턴으로 준수해야합니다.
import java.io.*;
import java.util.*;
class Modelo implements Runnable{
static String ReadLn(int maxLength){ // utility function to read from stdin,
// Provided by Programming-challenges, edit for style only
byte line[] = new byte [maxLength];
int length = 0;
int input = -1;
try{
while (length < maxLength){//Read untill maxlength
input = System.in.read();
if ((input < 0) || (input == '\n')) break; //or untill end of line ninput
line [length++] += input;
}
if ((input < 0) && (length == 0)) return null; // eof
return new String(line, 0, length);
}catch (IOException e){
return null;
}
}
public static void main(String args[]) // entry point from OS
{
Modelo myWork = new Modelo(); // Construct the bootloader
myWork.run(); // execute
}
public void run() {
new myStuff().run();
}
}
class myStuff implements Runnable{
public void run(){
try
{
/// PLACE YOUR JAVA CODE HERE
}catch(Exception e){
System.out.println("A Exception was generated");
}
}
// You can insert more classes here if you want.
}
왜 내가 여기에 코드를 배치하지 않고 여기에 놓아야 하는가?
try{
while (length < maxLength){//Read untill maxlength
input = System.in.read();
if ((input < 0) || (input == '\n')) break; //or untill end of line input
line [length++] += input;
}
입력을 어떻게 조작합니까 ??
해결책
여기에 아이디어는 귀하의 프로그램을 myStuff
클래스, 어디에서 호출 될 것입니다 run()
방법. 로부터 run()
방법, 사용할 수 있습니다 Modelo.ReadLn()
입력을 얻으려면.
제휴하지 않습니다 StackOverflow