2017-01-31 3 views
-3

私はいくつかの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()でそれに任意の行を追加しないでください、あなたに

+0

「javaの長さ」とはどういう意味ですか?あなたの質問は何ですか? – EJP

+0

Javaの長さは、コメントのない出力のコードの長さです。分でJavaの長さがgetJavaLineLength()メソッド内のJavaLineから渡されていません。たとえば、出力ビットに "lenJava"を出力に追加すると、行頭のjavacodeの長さが追加されますが、lenJavaはProgramクラスに渡されないため、入力から最長の文字列を計算することはできませんファイル。 – Cheeseslinger123

+0

Javaコードの1行の長さを意味しますか?自分をはっきりさせる。 – EJP

答えて

1

ありがとうございました

おそらくfindMaxJavaLineLength()Program.indentProgram()から呼び出して、その値をreturnLineWithCommentAt()に渡すことを意図していましたか?

だけ

public String returnLineWithCommentAt(int maxLineLength) 

returnLineWithCommentAt()の署名を変更して、あなたは、このようにProgram.indentProgram()でそれを呼び出すことができます。

int maxLineLength = findMaxJavaLineLength(); 
for (JavaLine line: stored) 
{ 
    res += line.returnLineWithCommentAt(maxLineLength) + "\n"; 
} 

JavaLine.returnLineWithCommentAt()からtを削除することを忘れないでください。

+0

これを修正するにはどうすればいいですか? – Cheeseslinger123

+0

私はすでに充満したプログラムを渡すつもりですが、私は静的なメソッドを設定しないでどうすればいいのでしょうか? – Cheeseslinger123

+0

2番目の考えで、私は思っています。私は 'Program.indentProgram()'から 'findMaxJavaLineLength()'を呼び出して、その値を 'returnLineWithCommentAt()'に渡すと思います。私は私の答えを更新します。 –

関連する問題