>source

간단한 식당 등록/도서 시스템을 시뮬레이트하는 간단한 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;
    }

내 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의 전체 코드에 대한 링크입니다. 혼란에 대해 사과드립니다. 나는 자바에 익숙하지 않다. repl 링크

  • 답변 # 1

    당신의 다른 사건은 어딘가에서 당신의 calculatePerson 에서 처형되었습니다.  문자열을 두 번 구문 분석하는 방법

    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
    }
    
    

  • 답변 # 2

    로그를 볼 수 있듯이 :-

    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

    #98 줄에서와 같이 코드의 else 블록  와이즈 비즈  분명히 #99 를 설정  그리고 startTime   endTime 로 문자열  사용자가 추가하지 않은 경우 동일한 내용을 Double으로 구문 분석하면 예외가 발생합니다.

    솔루션: 다른 접근법을 찾으십시오. 어쩌면 'None' 와 같은 깃발을 설정할 수 있습니다  사용자의 선택에 따라 true 또는 false로 설정 한 다음 할인 시작 및 종료 시간을 읽고 설정합니다.

    추가: 코드에서 예외 처리를 사용할 수도 있으며 많은 경우에 도움이됩니다. 이 애플리케이션의 입력에 필요한 많은 유효성 검사가 있으므로 공부하고 코드에 포함시켜보십시오.

    is10DiscountAvailable

관련 자료

  • 이전 c++ - 배열 유형의 표현식에 오류 할당
  • 다음 symfony4 - 심포니 4 - 나뭇 가지 스타일 시트 및 경로 문제