2014-09-22 49 views
0

我很新的編程壞的解釋和/或糟糕的代碼非常抱歉......無限while循環;輸入驗證;不知道該怎麼做才能讓它在讀取輸入之前進行讀取,我應該怎麼做?

不管怎麼說,我目前正在使用「method overload」的轉讓,我希望能夠得到一個來自用戶的doubleint

我的第一個代碼工作,所以我決定添加一個else到最後的if語句的末尾,檢查不良輸入並重申了整個代碼。問題是,當你第一次放置數字時,代碼工作正常,如果你輸入了錯誤的輸入,它將啓動while循環,不管任何輸入,都會重新迭代代碼塊。我知道它只是忽略了if聲明,因爲它們之前沒有任何輸入(或任何阻止它的輸入?)。我需要一些代碼檢查獲取輸入,然後在聲明變量類型之前檢查它是整數還是雙精度的方法......或者如果有更好的方法請分享...如果您需要更多的知識回覆此問題後或任何...這裏 此外,其還不算完,稱之爲草案,如果你

public class LoanRates { 
    public static void main(String[] args){ 

     Scanner in = new Scanner(System.in); 
     boolean x = false; 
     while(x = true){ 
      System.out.println("please enter a number"); 
      x = false; 
      if (in.hasNextInt()){ 
       int rate = 0;   
       rate = getNumbers(rate, in); 
       System.out.println(rate); 
       break; 
      } else if(in.hasNextDouble()){ 
       double rate = 0; 
       System.out.println("please enter a number"); 
       rate = getNumbers(rate, in); 
       System.out.println(rate); 
       break; 
      }else {     
      System.out.print("please enter a number");}   
     } 
     System.out.print("did it work?"); 
    } 

    public static double getNumbers(double rate, Scanner in){ 
     rate =in.nextDouble(); 
     return rate; 
    } 

    public static int getNumbers(int rate, Scanner in){ 
     rate = in.nextInt(); 
     return rate; 
    } 
} 

回答

1

您正在使用while(x = true)那麼它始終是真實的

首先你必須初始化變量x爲真 。否則它不會進入while循環 boolean x = true;

嘗試while(x == true)並確保在必要時將variable x的值更改爲false 嘗試這樣。 但最好是通過雙或int值,而不是通過掃描儀參考getNumbers方法

package test; 

import java.util.Scanner; 
import javax.swing.JOptionPane; 

public class LoanRates { 
    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     while (true) { 
      System.out.println("Please enter a number"); 
      String input = in.next(); 
      try { 
       int rate = Integer.parseInt(input); 
       // you can use the rate variable and change your method to accept the input value 
       System.out.println(getNumbers(rate)); 
       break; 
      } catch (NumberFormatException e) { 
       try { 
        double rate = Double.parseDouble(input); 
        // you can use the rate variable and change your method to accept the input value 
        System.out.println(getNumbers(rate)); 
        break; 
       } catch (NumberFormatException ex) { 
        System.out.println("Invalid number."); 
       } 
      } 
     } 
     System.out.print("did it work?"); 
    } 

    public static double getNumbers(double rate) { 
     // rate calculation logic 
     return rate; 
    } 

    public static int getNumbers(int rate) { 
     // rate calculation logic 
     return rate; 
    } 
} 
+0

我做到這一點,它一直沒有給我一個機會做輸入重申...下面有一個例子發生什麼情況:請輸入數字請輸入數字輸入數字輸入數字輸入數字輸入數字輸入數字輸入數字輸入數字輸入數字輸入數字輸入數字輸入數字輸入數字輸入numberplease輸入數字輸入數字輸入數字輸入數字輸入數字輸入數字 – 2014-09-22 03:12:31

+0

查看我的代碼:) – 2014-09-22 03:30:11

+0

問題在於它只在(if(in.hasNext [int/double]))和while循環滑過之後纔得到輸入......它一直在重申......你可以測試代碼,輸入一個字符串你會看到它不斷重申同樣的事情...... – 2014-09-22 03:45:13