2016-03-23 4 views
0

プログラムJAVAにブレース出力カウント{と}私はコードを含む入力ファイルを読み取り、対応する括弧({と})と一致する出力を生成する必要が

import java.util.scanner; 
public class Tester {1 
public static void main(String[] args) {2 
Scanner in = new Scanner (System.in); 
int price = in.nextInt; 
if (price < 10) 
System.out.println("Good price"); 
System.out.println ("Buy it"); 
}2 
}1 
}0 
}0 
をどのように見えるかの

は、マッチのない追加の中カッコを表します。 これに最も効率的にアプローチする方法は何ですか? 文字列で1行ずつ処理する必要がありますか?

+0

あなたはあなたのアプローチを表示することができますか? –

+5

質問は私にとっては十分ではありませんが。 中括弧を確認する最も簡単な方法は、スタックを使用することです。 - 左のブレースを押すとそれを表示します 2-右のブレースを見つけたら、スタックからアイテムを1つポップします スタックが空の場合あなたは処理を終えると、適切な数の中かっこを持っています。 –

+0

私の最初の思考プロセスは、私が文字列で行ごとに行くことです。 – Jying11

答えて

0

countを保存することができます。各行に文字を反復し、countを増分(または減分)し、{および}のそれぞれに対して(出力する:count)。 closeScannerのブロックをfinallyまたはtry-with-resourcesにすることを忘れないでください。

File f = new File(System.getProperty("user.home"), "Tester.java"); 
try (Scanner scan = new Scanner(f)) { 
    int count = 0; 
    while (scan.hasNextLine()) { 
     String line = scan.nextLine(); 
     for (char ch : line.toCharArray()) { 
      System.out.print(ch); 
      if (ch == '{') { 
       System.out.print(++count); 
      } else if (ch == '}') { 
       if (count > 0) { 
        System.out.print(--count); 
       } else { 
        System.out.print(count); 
       } 
      } 
     } 
     System.out.println(); 
    } 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+0

私に説明してもらえますか(char ch:line.toCharArray())は何ですか? – Jying11

+0

これは、['for-each'ループ](http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html)の[' String .CharArray() '](http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#toCharArray--)を参照してください。 –

+0

助けてくれてありがとう、私はそれがとてもシンプルであるとは思っていませんでした。 – Jying11

0

あなたは以下のようにスタックを利用することにより、余分な括弧を見つけることができ、あなたのファイルTester.javaは、ユーザのホームフォルダにあなたが何かなどを行う可能性があると仮定:

public static void main(final String[] args) { 

    Stack<String> stack = new Stack<String>(); 
    File file = new File("InputFile"); 
    int lineCount = 0; 

    try (BufferedReader br = new BufferedReader(new FileReader(file))) { 
     String line; 
     while ((line = br.readLine()) != null) { 
      lineCount++; 
      for (int i = 0; i < line.length(); i++) { 
       if (line.charAt(i) == '{') { 
        stack.push("{"); 
       } else if (line.charAt(i) == '}') { 
        if (!stack.isEmpty()) { 
         stack.pop(); 
        } else { 
         System.out.println("Extra brace found at line number : " + lineCount); 
        } 

       } 
      } 
     } 
     if (!stack.isEmpty()) { 
      System.out.println(stack.size() + " braces are opend but not closed "); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
関連する問題