2014-03-25 25 views
1

我對使用掃描儀類讀取輸入有疑問。通常它進入這個方式。如果我用的是打印的,而不是我的println可以得到輸入在同一行使用掃描儀類讀取輸入數據

public class A { 
    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     System.out.print("Enter loan amount: "); 
     double loanAmount = sc.nextDouble(); 
    } 
} 

現在我想延長一些其他方式使用掃描儀,但我不能這樣做。

public class A { 
    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     String input = ""; 
     double val = 0.0; 
     System.out.println(""Enter a command push n,add"); 
     Calculator xyz = new Calculator(); 
     while(true) { 
      input = sc.next(); 
      if(input.equals("push")+val) { 
       val = sc.nextDouble(); 
       xyz.push(val); 
       abc.getValues(); 
      } 
      if(input.equals("add")) 
      xyz.add(); 

     } 
    } 
} 

在上述我想讀在同一行中的值後I型「推」 例如,當運行上述代碼我將得到O/P如下

Enter a command 

push 
4 
4.0 

但我想的O/p爲:

Enter a command 

push 4 
4.0 

回答

0

選項1

每一行都會有exactely一個字和一個雙:

System.out.println("Enter a command"); 
final String command = sc.next(); 
final double value = sc.nextDouble(); 

Working example

選項2

線可以具有令牌的可變數目的命令; 使用sc.nextLine()和解析手動輸入:

final String input = sc.nextLine(); 
eval(input); 

eval是這樣的:

private void eval(String input) { 
    String[] parts = input.split("\\s+"); 
    switch (parts[0]) { 
     case "push": { 
      final double value = Double.parseDouble(parts[1]); 
      stack.push(value); 
      System.out.println(value); 
      break; 
     } 
     case "pop": { 
      System.out.println(stack.pop()); 
      break; 
     } 
     case "add": { 
      System.out.println(stack.pop() + stack.pop()); 
      break; 
     } 
     case "exit": { 
      hasNext = false; 
      break; 
     } 
     default: { 
      System.err.println("Invalid command"); 
      break; 
     } 
    } 
} 

Working example

最後一個例子演示了一個簡單的解釋接受如序列:

push 4 
push 8 
push 10 
add 
pop 
exit 

還可以實現類似於第一示例代碼通過相同的:

  1. 呼籲sc.next()獲得實際的命令
  2. 「解釋」命令
  3. 使得sc.next*電話接收的令牌序列特定於每個命令。

但我認爲sc.nextLine()是更容易管理,特別是如果您需要驗證輸入。

+0

嗨安東尼,我想我沒有很好地解釋這個問題。請參閱上面編輯的代碼 – Sandy

+0

我的第一個示例正是如此,請查看上面的工作示例,'push 4'正在一行中讀取。 –

0

試試這個: -

public class A{ 
    public static void main(String[] args) { 
    Scanner sc = new Scanner(System.in); 

    System.out.println("Enter a command"); 
    while(true){ 
    String val[]=sc.nextLine().split(" "); 
    //System.out.println("push "+val[1]); 
    System.out.println(Double.parseDouble(val[1])); 

} 
    } 
    } 

輸出: -

Enter a command 
push 4 
4.0 
push 5 
5.0 
push 6 
6.0 

希望它會幫助你。

+0

當我們使用System.out.println時,你的解釋是有效的,但是如果條件中我如何使用同樣的東西。對不起我的問題,但我仍然處於Java的學習階段 – Sandy