簡體   English   中英

java-出現雙精度問題,當用戶輸入字母/符號時,程序無法運行

[英]java - issue with double, when user enter letter/signs, the program fails to run

我是一個初學者,我正在嘗試使用雙變量制作一個簡單的計算器程序,以便允許用戶同時添加intdouble數來進行計算。 但是,只要用戶輸入String ,程序就會失敗。 我已經做了很多嘗試來解決這個簡單的問題。 我希望有一個人可以幫助我。

請輸入第一個數字:因此,當用戶輸入25 / 25.5時,一切正常,但是當用戶輸入字母(例如e / f / k等)時,程序將失敗。 我在“請輸入第一個數字”之后嘗試了以下代碼:

if (user1 == aswin.nextDouble())
{
    System.out.println("Continue");
}
else (user1 == Double.parseDouble(str))
{
    System.out.println("Invalid Entry - Please enter Only numbers");
}

下面是實際的程序,沒有上面的代碼:

import java.util.Scanner;
import java.text.NumberFormat;

public class NewTwo_Calculator_IF_Statement {


  public static void main (String [] args)
  {

    Scanner aswin = new Scanner (System.in);

    double user1 = 0, user2 = 0, mult, div, sub, ad;
    char user3;
    boolean run = true;
    String user;


    System.out.println ("Welcome to ASWINS calculator" + '\n');

    System.out.print ("Please enter First number - ");
    user1 = aswin.nextDouble();

    System.out.print("Please Enter Second number - ");
    user2 = aswin.nextDouble();

    System.out.println ('\n' + "Please choose following options" + '\n');
    System.out.println ("Type either A/a/+  for Addition ");
    System.out.println ("Type either S/s/-  for Substraction");
    System.out.println ("Type either D/d or /  for Division ");
    System.out.println ("Type M/m/*  for Multiplication");
    user3 = aswin.next().charAt(0);

    mult = user1*user2;
    ad = user1+user2;
    sub = user1-user2;
    div = user1/user2;

    if (user3 == ('*') || user3 == ('m') || user3 == ('M')) 
    {
        System.out.println('\t' + "Multiplication of " + user1 + " and " +user2 + " is = " + mult + '\n');
    } else if (user3 == ('+')  || user3 == ('a') || user3 == ('A'))
    {
        System.out.println ('\t' + "Addition of " + user1 + " and " +user2 + " is = " + ad + '\n');
    } else if(user3 == ('-')  || user3 == ('s') || user3 == ('S'))
    {
        System.out.println ('\t' + "Substraction of " + user1 + " and " +user2 + " is = " + sub + '\n');
    } else if (user3 == ('/')  || user3 == ('d') || user3 == ('D'))
    {
        System.out.println ('\t' + "Division of " + user1 + " and " +user2 + " is = " + div + '\n');
    } else
    {
        System.out.println('\t' + "Invalid Input");
    }       

    System.out.println ("Please Enter 'e' or type 'exit' to exit the program OR type anything else to stay on the page" + '\n');
    user = aswin.next();

    if (user.equalsIgnoreCase("e") || (user.equalsIgnoreCase("exit")))
    {
        System.out.println("Thanks for Entering -> " + user + " <-");
        System.out.println ("You QUIT the page, Thanks and Hope you will use my(Aswin's) Calculator again");
        System.exit(0);
    }
    else 
    {
        System.out.println("Thanks for Entering -> " + user + " <-");
        System.out.println (" You are STAYING on the page, Thanks " + '\n');
        System.out.println  ( "Thank you so much for using my calculator");
    }

  }
}

官方文檔中 ,提到了.nextDouble()一個標記(用戶輸入)與浮點數不匹配時(例如,當用戶輸入字母時) .nextDouble() 引發 InputMismatchException 您可以使用try catch塊來處理此類異常:

try{
    user1 == aswin.nextDouble()
}catch(InputMismatchException e){
    // User input is invalid
    System.out.println("Invalid Entry - Please enter Only numbers");
}

您可以在此處閱讀有關捕獲和處理異常的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM