Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Звездочка в строке аргументов вызова
Список форумов
 ->  Основы языка Java


 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
kvaka : 50
Новичок

СообщениеФев 04, 2012 18:33 
Ответить с цитатой
Помогите решить следующую проблему:
Есть довольно стандартная задача:
Реализация простейшего калькулятора. Доступны четыре арифметических
действия: сложение (+), умножение (*), деление (/) и вычитание (-). На вход
программе подается строка вида [число][ариф. знак][число], на выходе результат
операции.
Например:
Input: 4+7
Output: 11

Ничего вроде бы сложного. Написал код:
Код:


package testwork;
public class Testwork3 {

    public static void main(String[] args) {
      if (args.length<3){
          System.out.println("Арифметическая операция задана неверно-введено меньше 3х аргументов");
          return;
      }
     
      System.out.println("ВВедены параметры:"+args[0]+args[1]+args[2]);
     
      double x,y,result;
      try{
          x=Double.parseDouble(args[0]);
          y=Double.parseDouble(args[2]);
         
      }catch(Exception e){
          System.out.println("аргументы-числа заданы неверно");
          System.out.println(e.toString());
          return;
      }
     
      if (args[1].length()>1){
          System.out.println("Арифметическая операция должна быть задана одним символом");
          return;
      }
     switch (args[1].charAt(0)){
         case '+':
             result=x+y;
             break;
         case '-':
             result=x-y;
             break;
         case '*':
             result=x*y;
             break;
         case '/':
             if (y==0) {
                 System.out.println("Деление на ноль!!!");
                 return;
             }
             result=x/y;
             break;
          default:
             System.out.println("Арифметические операции задаются следующими символами: + , - , * , /");
             return;
     }
     System.out.println(args[0]+args[1]+args[2]+"="+result); 
    }
}


Все работает как надо за исключением одного момента:
при вводе в строку аргументов "*" для выполнения умножения происходит что-то не то.
Вставленная в начало программы строчка специально для отслеживания этого момента
Код:

System.out.println("ВВедены параметры:"+args[0]+args[1]+args[2]);

при вводе в строке аргументов, например, 120 * 20 печатает в консоли вместо "ВВедены параметры:120*20" такую фигню: "ВВедены параметры:120buildbuild.xml".
Конечно можно поменять в программе "*" на "х" и не париться, тем не менее хочется выполнить все по заданию. Соответственно вопрос: почему происходит такая фигня? "*" - это для строки аргументов какой-то спецсимвол??? Если что - код пишу в NetBeans 7.0.1
К началу Посмотреть профиль Отправить личное сообщение
мсье клоц : 563
Постоянный посетитель

СообщениеФев 04, 2012 18:59 
Ответить с цитатой
Да, звёздочка - это спецсимвол. За что именно он отвечает я сказать не могу, но вообще используется как маска, т.ч, возможно, что он перечисляет некоторые переменные или содержимое папки.

Попробуйте из разных папок запустить приложение из командной строки командой java Testwork3 4 * 3 и поглядите, что он будет выводить в каждом из случаев. И да, поместите его в default package для пущего эффекта.


p.s.
Наверное, будет лучше считывать цифирь и знаки из стандартного потока ввода.
К началу Посмотреть профиль Отправить личное сообщение
loptop : 143
Новичок

СообщениеФев 04, 2012 21:49 
Ответить с цитатой
Сначала с твоей строкой работает шел и он вместо твоей звездочки подставляет название всех файлов в папке, тебе надо использовать двойные кавычки, чтобы выделить строку "7+2"
К началу Посмотреть профиль Отправить личное сообщение
 
Начать новую тему  Ответить на тему
Страница 1 из 1
Список форумов
 -> Основы языка Java


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru