2015-09-13 23 views
1

此代碼是prifix的計算器。 首先輸入表示要計算的行數,然後輸入 表達式。使用掃描儀時的NoSuchElementException

e.g) 2 \ n 12 + 3 * \ n 31/2-4 * 2 + \ n

,而且運作良好的食,但在得分網站沒有工作。 評分站點說

例外:java.util.NoSuchElementException也許在:在 Calculation.main(Calculation.java:16)

線16是「字符串字符串= scan2.nextLine(); 「

但我找不到哪裏錯了。

import java.util.*; 
    public class Calculation{ 

     public static void main(String[] args){ 

      System.out.print("Enter a number: "); 
      Scanner scan1=new Scanner(System.in); 
      int n=scan1.nextInt(); 

      ArrayList<String> input=new ArrayList<String>(); 

      for(int i=0;i<n;i++){ 

       System.out.print("Enter a expression in postfix: "); 
       Scanner scan2=new Scanner(System.in); 
       String string=scan2.nextLine(); 
       input.add(i,string); 

      } 

      Stack<Integer> stack=new Stack<Integer>(); 

      for(int i=0;i<=input.size()-1;i++){ 
       for(int j=0;j<=input.get(i).length()-1;j++){ 
        if(input.get(i).charAt(j)>=48&&input.get(i).charAt(j)<=57) 
         stack.push(Integer.parseInt(input.get(i).valueOf(input.get(i).charAt(j)))); 
        else{ 
         int n2=stack.pop(); 
         int n1=stack.pop(); 

         if(input.get(i).charAt(j)=='+') 
          stack.push(n1+n2); 
         if(input.get(i).charAt(j)=='-') 
          stack.push(n1-n2); 
         if(input.get(i).charAt(j)=='/') 
          stack.push(n1/n2); 
         if(input.get(i).charAt(j)=='*') 
          stack.push(n1*n2);   
        } 

       } 

       int output=stack.pop(); 
       System.out.println(output); 
      } 

     } 

    } 
+0

評分網站是否使用測試用例來檢查算法,還是隻是一個在線編譯器? –

+0

不要爲同一輸入流打開多個掃描儀。並注意[清除'nextInt'後的掃描器](http://stackoverflow.com/q/13102045/4125191)。 – RealSkeptic

回答

0

的是,當你使用

String str=scan1.nextLine(); 

只會讀你輸入到空間以後,它不會那麼讀一個​​字符串輸入只使用

String str=scan1.next(); 
0

閱讀一條完整的線與線路結尾保持同步。請勿使用其他掃描儀。

int n=scan1.nextInt(); 
    scan1.nextLine(); 
    ArrayList<String> input=new ArrayList<String>(); 
    for(int i=0;i<n;i++){ 
     System.out.print("Enter a expression in postfix: "); 
     String string=scan1.nextLine(); 
     input.add(i,string); 
    } 
0

當你nextInt()後做scan2.nextLine();以前換行符沒有處理這就是爲什麼撥通了你的scan2.nextLine(),而不是你的新的輸入讀取換行符仍處於緩衝。

您可以處理它兩種方式 -

  1. 立即做一個空scan1.nextLine()首先nextInt()調用之後。

  2. 或者使用nextInt()而不是使用nextLine()並使用Integer.parseInt()將該字符串轉換爲整數。