“清除”一个ArrayList然后再次使用它而不终止程序

时间:2016-04-18 02:44:50

标签: java list arraylist

我想要发生什么

输入= a,b,c,d

输出= a,b,c,d

输入(不终止程序)= e,f,g,h

输出= e,f,g,h

发生了什么

输入= a,b,c,d

输出= a,b,c,d

输入(不终止程序)= e,f,g,h

output =“empty”

代码

主要

之外
public static ArrayList<String> alpha = new ArrayList<String>();

采用不同的方法

alpha.add("string"); //string contains an element which is changed after each loop

主要是在打印结果后

alpha.clear();
alpha = new ArrayList<String>();

然后我问用户是否要输入不同的文本,并且当它返回空列表时。另请注意,当我不包含.clear时,它只会重复旧输出。

编辑:

public static void startDFA(List<String> listDFA){

   for (index = 0; index<size; index++){
      String currString = listDFA.get(index);
      int sizeCurrString = currString.length();

      if (currString.indexOf('{') != -1 || currString.indexOf('}') != -1 ){
          //System.out.println("curly");
          curly++;
      }
      if (curly <= 2){
          Q.add(currString);
      }
      if (curly > 2 && curly <5){
          sigma.add(currString);
      }
      //System.out.println(index);
      //System.out.println(listDFA.get(index));
   }
   printVal();
}

public static void printVal(){
  System.out.println("The states (Q) are: ");
  System.out.println(Q);
  System.out.println("The elements (Sigma) are: ");
  System.out.println(sigma);
}

public static void main(String[] args){                             // MAIN
  boolean recur = true; 
  while (recur){                                                    //Reiterates question
       System.out.println("Start? 'y' or 'n'");                       //Ask user to start program
       Scanner reply = new Scanner(System.in);
       String strRep = reply.nextLine();

       if (strRep.compareTo("y")==0){
           System.out.println("Started");
           System.out.println("Please enter a encoded DFA: ");        //Ask user for DFA
           String DFA = reply.nextLine();
           System.out.println("You've entered: " + DFA );             //Reiterates string user inputed
        List<String> listDFA = Arrays.asList(DFA.split("\\s*,\\s*"));
        size = listDFA.size();
        startDFA(listDFA);
       }
       else{
           System.out.println("End of program.");
        recur = false;
     }  
  }   
}

截图 Part1Part2Part3

2 个答案:

答案 0 :(得分:1)

我不确定您的 if子句,因为您的输入是a,b,c,d或e,f,g,h并且您正在寻找大括号&amp; 。我在您的代码中看到的一个问题是您增加卷曲变量计数,并且它在首次运行时工作正常,因为当您第一次运行应用程序 curly = 0 时。但是在完成第一次运行之后,你的卷曲将大于零,或者可以说第一次运行的可能性达到最大值。您应该在startDFA方法的start开始之前重置curly = 0,如下所述,或者在调用startDFA之前在main方法中设置curly = 0。除此之外,你还需要清除你的Q,sigma,翻译,开始&amp;完成arraylist如果需要与卷曲。最好的地方是做所有这些重置和清除是在循环内的startDFA方法内。

public static void startDFA(List<String> listDFA){
   curly = 0
   for (index = 0; index<size; index++){

   }
}

答案 1 :(得分:1)

只是声明很多静态变量是不好的编码风格 - 你看到了会发生什么。声明一个类,将带有相关信息的变量放入字段(这里:2个列表)。在最里面的范围内声明其他变量(这里:卷曲)。不要声明无用的变量(这里:size,sizeCurrString)。使用for语句的compact。

public class Curly {
    private List<String> q = new ArrayList<>();
    private List<String> sigma = new ArrayList<>();

    public void startDFA( List<String> listDFA){
        int curly = 0;
        for( String curr: listDFA ){
            if( curr.indexOf('{') != -1 ||
                curr.indexOf('}') != -1 ){
                curly++;
            } // maybe: else 
            if (curly <= 2){
                q.add(curr);
            } else if( curly <5 ){
                sigma.add(curr);
            }
        }
    }

    public void printVal(){
        System.out.println("The states (Q) are: ");
        System.out.println(q);
        System.out.println("The elements (Sigma) are: ");
        System.out.println(sigma);
    }
}

主要是你做的:

    Curly curly = new Curly();
    curly.startDFA( listDFA );
    curly.printVal();

如果程序需要增长,请添加更多方法(例如List<String> getQ)。 避免静态