2013-11-22 7 views
4

Я новичок, и я начал изучать некоторые вещи, поэтому я сделал калькулятор, который требовал только одну строку. Он работает, когда я делаю это в этом формате: Int space String space int. EG: 10 + 50. Если я не занимаюсь пробелами, например, 50 + 50, программа терпит неудачу. Есть ли способ распознать пробелы в Java? Говорю, что я нооб, но я обнаружил, что я отлично справился с этой задачей, которая поддерживала меня. Вот Teh кода:Распознавание пробелов в 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

Ну, это порождает другую ошибку: Неверная escape-последовательность (допустимые - \ b \ t \ n \ f \ r \ "\ '\\) - Спасибо заранее, извините, если я пропустил что-либо, но я все еще многому учусь – user3022359

1

Есть некоторые удобные методы в сканере, что вы используете в настоящее время (то есть nextInt()), но для вашей цели, вы должны, вероятно, просто получить nextLine() и сделать некоторый более сложный разбор выражения.

Это, вероятно, слишком много, и я бы не стал делать это своей главной задачей прямо сейчас, если бы был вами, но в конце концов вы можете прочитать о формальных языках и использовать такие инструменты, как http://www.antlr.org/ для таких целей.

+0

Ну моя идея состояла в том, чтобы иметь калькулятор, который функционировал как 50 + 50 на одной линии, а не: 50 (следующая строка) + (следующей строке) 50 (следующая строка) Если вы знаете, что я имею в виду. – user3022359

+0

В случае nextLine() у вас будет полная строка, например 50 + 50, а затем вы можете извлечь выражение и разделить его на части оттуда. Для простого решения этого конкретного случая использования вы также можете сделать то, что предложил Хантер Макмиллен. Я бы рекомендовал это, а не сосредоточиться на формальных языках, когда вы просто входите в программирование :) –

0

Проблема здесь заключается не в том, что Java не обрабатывает пробелы справа, проблема связана с классом Scanner, который по умолчанию использует пробел как разделитель (способ различать разные части). Вы все еще можете использовать класс Scanner, но для достижения того, что вы пытаетесь сделать, вам понадобятся некоторые основные знания регулярного выражения.

Для новичков Java было бы лучше выполнить некоторую базовую обработку строк. Вам просто нужно сделать input.nextLine() и проанализировать содержимое строки.

Ключевые слова вы ищете являются indexOf, substring, trim and Integer.parseInt()

Смежные вопросы