BufferedReader需要输入才能打印每一行

时间:2014-12-06 19:57:14

标签: java

我正在解决SPOJ上的一个问题,我已经正确地计算了逻辑,手动完成了硬测试用例,并且它们有效,但是我得到了错误的答案,因为我无法正确打印输出。

以下是代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    static int n;
    static int[] mem;
    static String answer = "\n";
    static char[] v;

    public static void main(String[]args){
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        try{
            int tries = Integer.parseInt(br.readLine());
            for(int i=0;i<tries;i++){
                String data = br.readLine();
                v = data.toCharArray();
                n = v.length;
                mem = new int[v.length+1];
                Arrays.fill(mem,-1);
                answer =  answer +maximum(0);
                Arrays.fill(mem, -1);
                answer = answer+" "+minimum(0);
                System.out.print(answer);
                answer="\n";
            }

        }
        catch(Exception e){

        }

    }

    public static int maximum(int i){

        if(i==n-1) return v[i]-'0';
        else {

            if(mem[i]!=-1) return mem[i];
            if(i+4<=n-1){
                if(isMulti(v[i+3])){
                    if(v[i+1]=='*') return mem[i] =  Math.max(((v[i]-'0'))*(maximum(i+2)),((v[i]-'0')*(v[i+2]-'0'))*(maximum(i+4)));
                    else return mem[i] = Math.max(((v[i]-'0'))+(maximum(i+2)),((v[i]-'0')+(v[i+2]-'0'))*(maximum(i+4)));}
                else{
                    if(v[i+1]=='*') return mem[i] =  Math.max((v[i]-'0')*maximum(i+2),((v[i]-'0')*(v[i+2]-'0'))+(maximum(i+4)));
                    else return mem[i] = Math.max((v[i]-'0')+(maximum(i+2)),((v[i]-'0')+(v[i+2]-'0'))+(maximum(i+4)));}
            }
            else if(i+2<=n-1){
                if(v[i+1]=='*') return mem[i] =(v[i]-'0')*(v[i+2]-'0');
                else return mem[i]= (v[i]-'0')+(v[i+2]-'0');}
            return v[i]-'0';
        }
    }
    public static boolean isMulti(char x){
        if(x=='*') return true;
        return false;
    }

    public static int minimum(int i){
        if(i==n-1) return v[i]-'0';
        else {
            if(mem[i]!=-1) return mem[i];
            if(i+4<=n-1){
                if(isMulti(v[i+3])){
                    if(v[i+1]=='*') return mem[i] =  Math.min(((v[i]-'0'))*(minimum(i+2)),((v[i]-'0')*(v[i+2]-'0'))*(minimum(i+4)));
                    else return mem[i] = Math.min(((v[i]-'0'))+(minimum(i+2)),((v[i]-'0')+(v[i+2]-'0'))*(minimum(i+4)));}
                else{
                    if(v[i+1]=='*') return mem[i] =  Math.min((v[i]-'0')*maximum(i+2),((v[i]-'0')*(v[i+2]-'0'))+(minimum(i+4)));
                    else return mem[i] = Math.min((v[i]-'0')+(minimum(i+2)),((v[i]-'0')+(v[i+2]-'0'))+(minimum(i+4)));
              }
            }    
            else if(i+2<=n-1) {
                if(v[i+1]=='*') return mem[i] =(v[i]-'0')*(v[i+2]-'0');
                else return mem[i]= (v[i]-'0')+(v[i+2]-'0');
            }
            return v[i]-'0';
        }
    }
}

例如输入: 2

2 + 1 * 0 * 1 + 1

0 * 4 + 5 + 6 * 2

我需要打印出来: 3 0

22 0

但是我的程序需要我按Enter键才能打印22 0,并且在绿色输入后直接打印3 0而没有任何行间距。

除了主要内容之外,不要打扰其他任何东西,其余的是程序的逻辑。

1 个答案:

答案 0 :(得分:3)

使用println,而不是打印:

System.out.println(answer);