Получение исключения в потоке, указывающее на строки, относящиеся к double и методам в моем классе - PullRequest
0 голосов
/ 20 марта 2019

Я пишу простую Java-программу, которая имитирует простую систему регистрации / бронирования ресторанов.Я заставил это работать, вроде, но есть одна проблема, которую я не могу решить.После того, как я запустил программу, зарегистрировал новый ресторан, а затем забронировал его, я получаю эту ошибку:

Exception in thread "main" java.lang.NumberFormatException: For input string: "None"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.lang.Double.parseDouble(Double.java:538)
    at Restaurant.calculatePercent(Restaurant.java:69)
    at Main.main(Main.java:254)

My Restaurant.java:69 - это метод, в котором я рассчитываю процент скидки по сравнению с временными рамками.где скидка доступна для этого ресторана, который выбрал пользователь.

 public void calculatePercent(double bookTime){
        if (Double.parseDouble(startTime10) <= bookTime && bookTime <= Double.parseDouble(endTime10)){
            discountPercentage = 10;
        }
        else if (Double.parseDouble(startTime20) <= bookTime && bookTime <= Double.parseDouble(endTime20)){
            discountPercentage = 20;
        }
        else if (Double.parseDouble(startTime25) <= bookTime && bookTime <=
                Double.parseDouble(endTime25)){
            discountPercentage = 25;
        }
        else if (Double.parseDouble(startTime50) <= bookTime && bookTime <= Double.parseDouble(endTime50)){
            discountPercentage = 50;
        }
        else{
            discountPercentage = 0;
        }
    }

    public void calculatePercent(String bookTime){
        discountPercentage = 0;
    }

My Main.java:254

restaurantList.get(restaurantIndex).calculatePercent(bookTime);

Переменная bookTime имеет тип double, и я объявил ее следующим образом:


    System.out.print("Please put in the time you would like to book\n->");
    double bookTime = Double.parseDouble(input.nextLine());
    if (bookTime > 100){
        bookTime /= 100;
      }
      else{bookTime = bookTime;}

Это ссылка на мой полный код в repl.Я прошу прощения за беспорядок.Я совершенно новичок в Java. ссылка для ответа

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Другой случай был выполнен где-то, и в вашем calculatePerson методе вы разбираете строку в double

if (Double.parseDouble(startTime10) <= bookTime && bookTime <= Double.parseDouble(endTime10)){
      discountPercentage = 10;
    }

, поэтому вы получите исключение.

 if (ask10.toLowerCase().equals("y")){
       //.... your code
  }
   else{
      startTime10 = "None";   //<--------------------------- here
      endTime10 = "None";    //<--------------------------- here
  }

  //20%
  System.out.print("Does the restaurant has 20% discount time? Y/N: ");
  String ask20 = input.nextLine();
  String startTime20, endTime20;
  if (ask20.toLowerCase().equals("y")){
         //.... your code
  } else{
      startTime20 = "None";  //<--------------------------- here
      endTime20 = "None";    //<--------------------------- here
  }


  //25%
  System.out.print("Does the restaurant has 25% discount time? Y/N: ");
  String ask25 = input.nextLine();
  String startTime25, endTime25;
  if (ask25.toLowerCase().equals("y")){
         //.... your code
  }else{
       startTime25 = "None";  //<--------------------------- here
       endTime25 = "None";    //<--------------------------- here
  }


 //50%
 System.out.print("Does the restaurant has 50% discount time? Y/N: ");
 String ask50 = input.nextLine();
 String startTime50, endTime50;
 if (ask50.toLowerCase().equals("y")){
         //.... your code
else{
     startTime50 = "None";     //<--------------------------- here
     endTime50 = "None";       //<--------------------------- here
}
0 голосов
/ 20 марта 2019

Как вы можете видеть в журнале: -

Exception in thread "main" java.lang.NumberFormatException: For input string: "None" at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)

Ожидается действительное число вместо строки, такой как 'None', при разборе на двойное число.

parseDouble returns a primitive double containing the value of the string

Блок else в вашем коде, как в строке #98 #99, четко устанавливает строки startTime и endTime как 'None', если они не добавленыпользователем.Когда то же самое должно быть проанализировано в Double, выдается исключение.

Решение : Найти другой подход.Возможно, вы можете установить флажок, например is10DiscountAvailable, в значение true или false в зависимости от выбора пользователя, а затем перейти к чтению и настройке времени начала и окончания скидки.

Добавить : Вашкод также может использовать обработку исключений, это полезно во многих случаях.Попробуйте изучить и включить их в код, поскольку для входных данных в этом приложении требуется много проверок правильности.

...