在方法中返回字符串并更改全局变量

时间:2015-03-09 03:57:47

标签: java

我正在做的是尝试从方法追加改变变量postFix ....但是我没有运气...在我的主要方法结束时我有一个打印并且在我的追加方法结束时我有打印...当我运行程序时,他们不匹配....并且程序完全是通过传递我试图做的附加。为什么是这样?是因为我把它归还给一个方法而不是主要的?

//MAIN 
    public class stack{
        public static void main(String[] args) throws Exception{

String line = null;
String postFix = "";
int valOfStack = 0;
int icp,isp = 0;
BufferedReader in = new BufferedReader(new FileReader("p4a.dat"));
    char[] array;   
    array = new char[100];
    line = in.readLine();
    System.out.println("infix: "+line);
    int length = line.length();
        System.out.println("length: "+length);
         //char num = line.charAt(0);
    Stack stack = new Stack();
        //stack.push(num);
        //System.out.println(stack.top());

........续

  else if(word.contains("+")){
                  System.out.println("ya we in// charAt - "+i);
                      operatorJob(word,stack,valOfStack,postFix);

              }

              else if(word.contains("*")){
                  System.out.println("ya we in// charAt - "+i);
                operatorJob(word,stack,valOfStack,postFix);

              }

                  else if(word.contains("/")){
                  System.out.println("ya we in// charAt - "+i);
                operatorJob(word,stack,valOfStack,postFix);

              }

             else if(word.contains("^")){
                  System.out.println("ya we in// charAt - "+i);
                operatorJob(word,stack,valOfStack,postFix);

              }

//OPERATOR JOB
    public static int operatorJob(String word,Stack stack,int valOfStack,String postFix){
        //if word is an operator +-*/^or(

                if(stack.isEmpty()){
                    stack.push(word);
                valOfStack+=1;
                }

                else{
                String inStack =stack.top().toString();
                int isp = assignISPval(inStack);
                int icp = assignICPval(word);
                System.out.println(icp+" "+isp);
                    if(isp >= icp)
                    append(postFix,stack);

                }
//METHOD THAT IS RETURNING
public static String append(String postFix,Stack stack){
                    String operator = stack.pop().toString();
                    postFix = postFix.concat(operator);
                    System.out.println("a "+postFix);
                        return postFix;     
                }//end append

2 个答案:

答案 0 :(得分:1)

您没有将append(postFix,stack);的结果分配给变量

尝试类似

的内容
  String newValue = append(postFix,stack);
  System.out.println (newValue);

答案 1 :(得分:0)

添加Scary Wombat的回复:

当你调用append时,你有两个字符串引用(一个在操作符中,一个在追加中),名为postfix。它们都指向同一个对象。当您将postfix的追加值分配给postFix.concat(operator)的结果时,后缀的附加值现在指向正确的对象,但作业运算符中的那个没有。要使joboperator参考点指向相同的值,您必须在joboperator中设置它,这就是Scary Wombat的代码所做的。