私はいくつかのjavalineのインデントを作成するタスクを持っています。アイデアは、まずコメントからJavaを分割する必要があるということです。私は入力ファイルからのコメントを除いたjavacodeの最長行を見つけて、それをjavaの最大長に使用する必要があります。しかし、私は毎回0を返すという問題に直面しており、配列内の最長の行ではありません。ラインインデント - クラス間の各行でのjavalineの長さを0に設定しようとしました。
最初のコードは、最も長い長さのjavalineを処理するためのメソッドを保持するクラスです。
import java.util.*;
class Program
{
private ArrayList<JavaLine> stored = new ArrayList<>();
/**
* Constructor
*/
public Program()
{
stored.clear();
}
/**
* Add the next line of Java code to the stored program
* @param line A line of Java code
*/
public void addLine(String line)
{
stored.add(new JavaLine(line));
}
public String indentProgram()
{
String res = "";
for (JavaLine line: stored)
{
res += line.returnLineWithCommentAt() + "\n";
}
return res;
}
public int findMaxJavaLineLength()
{
int max = 0;
for (JavaLine line: stored)
{
int lineLength = line.getJavaLineLength();
if (lineLength > max) max = lineLength;
}
return max;
}
}
及びコードの第2片部にコードを分割し、Javaの長さを返しJavaLineクラスである:方法はfindMaxJavaLineLength()が呼び出され
class JavaLine
{
private String java = ""; // Java code on line
private String comment = ""; // The single line comment
private String javaSpace = "";
private int lenJava = 0; // The line length of just the java cod
public JavaLine(String line)
{
String[] splitted = line.split("// ");
java = splitted[0];
int slashCount = line.length() - line.replaceAll("//","").length();
if (slashCount >= 1) {
comment = "// " + splitted[1];
}
}
public int getJavaLineLength()
{
lenJava = java.length();
return lenJava;
}
public String returnLineWithCommentAt()
{
String output = "";
Program t = new Program();
int maxLenJavaLine = t.findMaxJavaLineLength();
int number = maxLenJavaLine - getJavaLineLength();
String javaSpace = "";
for (int n = 0; n < number; n++){
javaSpace = javaSpace + " ";
}
String commentOutput = comment;
if (java.contains("}")){
output = java;
}else if (java.contains("{")){
output = java;
} else {
output = java + javaSpace + commentOutput + "test: " + t.findMaxJavaLineLength();
}
return output;
}
}
私はそれをテストしたとgetjavalengthのlenJavaビットが同じクラスから取得したときにjavalineの長さを正しく処理しているようです。しかし、最も長い行を解こうとすると、他のクラスから取得すると0に設定されます。あたかも長さがjavalineクラスから他のクラスに渡されないかのようです。
以下は、私が現在受け取っている出力です。
import java.lang.Thread;// Use External classtest: 0
class Countdowntest: 0
{
public static void main(String args[])test: 0
{
// Start from 10test: 0
while (countdown > 0)// While greater than 0test: 0
{
System.out.println(countdown);// Write contents of countdowntest: 0
if (countdown == 3)// If equal to 3test: 0
{
System.out.println("Ignition");// Write Ignitiontest: 0
}
countdown--;// Decrement countdown by 1test: 0
try {
Thread.sleep(100);// 1000 milliseconds delaytest: 0
}
catch(InterruptedException e) {}
}
System.out.println("Blast Off");// Write Blast offtest: 0
}
}
"test:0"と出力されるビットは、私が最も長いjavalineの長さを期待しているところです。 "test:50"または "test:0"の代わりに何かを指定する必要があります。
はあなたがJavaLine.returnLineWithCommentAt()
の2行目にt
と呼ばれる新しいProgram
を作成するが、それは何の行が含まれていないとfindMaxJavaLineLength()
当然のように、あなたは、それにfindMaxJavaLineLength()
を呼び出す前にaddLine()
でそれに任意の行を追加しないでください、あなたに
「javaの長さ」とはどういう意味ですか?あなたの質問は何ですか? – EJP
Javaの長さは、コメントのない出力のコードの長さです。分でJavaの長さがgetJavaLineLength()メソッド内のJavaLineから渡されていません。たとえば、出力ビットに "lenJava"を出力に追加すると、行頭のjavacodeの長さが追加されますが、lenJavaはProgramクラスに渡されないため、入力から最長の文字列を計算することはできませんファイル。 – Cheeseslinger123
Javaコードの1行の長さを意味しますか?自分をはっきりさせる。 – EJP