2013-11-22 51 views
4

我是一個新手,我開始嘗試一些東西,所以我製作了一個只需要一行的計算器。當我以這種格式進行操作時它工作:Int空間字符串空間int。 EG:10 + 50.如果我不做50 + 50這樣的空格,程序就會失敗。有沒有辦法在Java中識別空格?不要忘記我是一個noob,但我發現我做了一個很好的工作,保持着我的動力。這裏是德代碼:識別java中的空格

package Tests; 

import java.util.Scanner; 

public class Calculator { 

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

    System.out.println("Enter your values : "); 
    int first = input.nextInt(); 
    String character = input.next(); 
    int second = input.nextInt(); 
    int answer = 0; 


    switch (character) { 
    case "*": 
     answer = first * second; 
     break; 
    case "/": 
     answer = first/second; 
     break; 
    case "-": 
     answer = first-second; 
     break; 
    case "+": 
     answer = first+second; 
     break; 
    default: 
     System.out.println("Failed to recognise character"); 
     break; 

    } 

    System.out.println("Answer : " + answer); 
} 
} 

回答

6

Scanner#next從輸入字符串中讀取下一個標記,這取決於您在創建對象時爲您的Scanner對象設置的任何分隔符。默認的分隔符是空格,所以當你將操作數和操作符隔開時,程序會正確處理它們。你可能設置您的掃描儀的分隔符作爲操作員。

Scanner input = new Scanner(System.in); 
input.useDelimiter("\+|\-|\*|\\"); 

並且您的程序將正常運行。

+1

比我的答案要好得多,他的簡單用例:) –

+0

請記住,這隻適用於二元運算符。如果否定,那麼在沒有額外檢查的情況下就會失敗。 –

+0

好吧,這引發了另一個錯誤:無效的轉義序列(有效的是\ b \ t \ n \ f \ r \「\'\\) - 預先感謝,抱歉,如果我錯過任何東西,但我還在學習很多 – user3022359

1

有在掃描一些方便的方法,你現在用的(即nextInt()),但你的目的,你應該可能只是得到nextLine(),做表達的一些更復雜的分析。

這可能太多了,如果我是你,我現在不會把它作爲我的主要焦點,但最終你可能想要閱讀正式語言並使用諸如http://www.antlr.org/之類的工具來達到這些目的。

+0

那麼我的想法是有運作像50 + 50在同一行,而不是一個計算器:50(下一行)+(下一行),50(下一行) 如果你明白我的意思。 – user3022359

+0

在nextLine()的情況下,您將擁有完整的字符串,例如50 + 50,然後您可以提取表達式並將其分成若干部分。 對於這個確切用例的簡單解決方案,您也可以執行Hunter McMillen的建議。我實際上會建議你,而不是專注於正式語言,當你進入編程:) –

0

這裏的問題不是Java沒有處理空白區域,問題在於Scanner類,它使用空白區作爲分隔符(區分不同部分的方式)。 您仍然可以使用Scanner類,但您需要一些基本的正則表達式知識才能實現您正在嘗試執行的操作。

對於Java初學者來說,最好是做一些基本的字符串處理。你只需要做input.nextLine()並解析字符串內容。您正在尋找

關鍵詞是indexOf, substring, trim and Integer.parseInt()