2014-03-03 46 views
0

打破我有我的工作,明天這個java項目的一個問題。我應該做一個while循環,提示用戶輸入物品的價格,並用任何負數結束循環,否則負數不能計數。然後,我必須分別使用變量3,2,1,0提示用戶使用會員折扣級別平臺15%off/gold 7%/ silver 3%/非member 0%off。對於成員狀態的無效輸入,用戶需要使用do-while循環再次輸入有效的輸入。然後,我使用相應項目總和的適當折扣,然後對其進行稅收。最後幾個步驟很簡單,但我堅持循環。Java的循環和負面

我做了一些搜索,發現這個代碼塊在這個網站,沒有工作的第一while循環,但我需要它的方式並沒有結束。 Using While Loop instead of a For Loop in Java to ask User Input

我修改它以適合我的需要,但我仍然無法找到一種方法來使throwable =任何負數,即< 0.這是可能的嗎?我很肯定有一種方法可以更簡單地做到這一點,而沒有我還沒有學會的try/catch。這是我非常略加修改

Scanner askPrice = new Scanner(System.in); 
BigDecimal totalPrice = new BigDecimal("0"); 
Scanner keyboard = new Scanner(System.in); 
while (true) { 
    System.out.println("Enter item price or negative number to quit:") ; 
    try { 
     double price = askPrice.nextDouble(); 
     totalPrice = totalPrice.add(new BigDecimal(String.valueOf(price))); 
    } 
    catch (Throwable t) { 
     break; 
    } 
    System.out.println(totalPrice.toString()); 
} 

我試圖打開try和catch語句到的if/else和更換與其他漁獲拋出(askPrice < 0),但我得到噸的錯誤。

我非常感謝,可以提供任何幫助。 謝謝。

+0

是的,有沒有嘗試/趕上的方式。 'break'會將你自己從'while'循環中移除,所以你在那裏是正確的。試着做一個簡單的'if'語句來檢查'price'的值,以及是否需要'bre​​ak'。 –

+1

不要使用try/catch - 完全沒有必要。 '如果(價格<0.0)中斷;'是你所需要的。 –

+0

另一件要說的是,不要捕獲'Throwable',而不是你特定的'Exception',你應該總是處理它。打印堆棧跟蹤以瞭解造成錯誤的原因。 –

回答

2

這聽起來像是功課。我知道很多老師反對學生利用'休息'來退出循環。這是我會怎麼做的。 try-catch語句是不必要的。

public static void main(String[]args) { 

Scanner keyboard = new Scanner(System.in); 
    double input = 0.0; 
    double totalPrice = 0.0; 

    do { 
     totalPrice += input; 
     input = keyboard.nextDouble(); 
    } 

    while(input >= 0); 
} 

使用while循環:

public static void main(String[]args) { 

Scanner keyboard = new Scanner(System.in); 
    double totalPrice = 0.0; 
    double input = keyboard.nextDouble(); 

    while(input >= 0) { 
    totalPrice += input; 
    input = keyboard.nextDouble(); 
    } 
} 
+0

謝謝,這真的有幫助。所有的try/catch和strings都讓我感到困惑,把它簡化爲簡單的雙打,循環很棒。你將如何在短時間內完成你的任務? – Akmar275

+0

我更新了包含while循環版本的答案。我建議你使用一種做法。這很簡單。 – Solace

+0

感謝您添加同時版本,我很感激。這是我的第一個編程課程,容易讓我迷失方向。 – Akmar275

0

你你不檢查負數。

而你需要將你最後的System.out外循環

Scanner askPrice = new Scanner(System.in); 
    BigDecimal totalPrice = new BigDecimal("0"); 

    while (true) { 

     System.out.println("Enter item price or negative number to quit:"); 
     try { 
      double price = askPrice.nextDouble(); 
      if (price < 0) 
       break; 

      totalPrice = totalPrice.add(new BigDecimal(String.valueOf(price))); 
     } catch (Throwable t) { 
      break; 
     } 
    } 
    System.out.println(totalPrice.toString()); 
0

我不知道的理解,但如果你想退出與負數作爲輸入,使用此:

Scanner askPrice = new Scanner(System.in); 
    BigDecimal totalPrice = new BigDecimal("0"); 
    Scanner keyboard = new Scanner(System.in); 
    double price = 0.0d; 
    try { 
     while (0.0d <= price) { 
     System.out.println("Enter item price or negative number to quit:") ; 
     price = askPrice.nextDouble();   
     totalPrice = totalPrice.add(new BigDecimal(String.valueOf(price)));  
     } 
    }catch (Throwable t) {   
     System.err.println(t.getMessage());   
    } 
    System.out.println(totalPrice.toString()); 

幾點:

  • 的try/catch總是出一個週期的,beacuase代碼的可讀性和更快
  • 裏面抓,你必須把SYSERR,而不是SYSOUT
  • 在原單碼

    ,永恆LOPP完成,當用戶把一塊錢焦炭,什麼轉換爲數字與指令拋出異常

    askPrice.nextDouble()

在你的情況,說明

double price = askPrice.nextDouble();   
totalPrice = totalPrice.add(new BigDecimal(String.valueOf(price))); 

不拋出任何異常負數。

1

這裏是while循環一個簡單的做,你正在尋找

double price = 0; 
do { 
    try { 
     price = askPrice.nextDouble(); 
     // if the price was > 0 we need to add it to the total 
     if(price > 0) 
      totalPrice = totalPrice.add(new BigDecimal(String.valueOf(price))); 
    } catch(InputMismatchException e) { 
     // exit our loop, if the user entered an invalid double. Maybe you want to display a message instead? 
     price = -1; 
    } 
} while(price >= 0); 

的關鍵是do-while循環VS while循環。在分析循環條件之前,do-while循環將始終運行一次。這使您可以接受循環內的用戶輸入並保持代碼清潔。我相信,儘可能避免使用break聲明是一種很好的做法。它通常會阻止你編寫錯誤的代碼(當然,switch語句除外)。

編輯:對於記錄,我認爲try catch語句不僅是必需的,而且對任何用戶輸入都是強制性的。當用戶輸入一個無效的數字時,是否想要拋出堆棧跟蹤時出現令人討厭的錯誤,或者程序是否正常處理錯誤的輸入並通知用戶。最重要的是它讓新程序員思考錯誤處理,這是軟件開發中非常重要的一部分。

1

的try/catch是處理異常和完全沒有必要在這裏。

Scanner askPrice = new Scanner(System.in); 
    BigDecimal totalPrice = new BigDecimal("0"); 
    Scanner keyboard = new Scanner(System.in); 

    while (true) { 

     System.out.println("Enter item price or negative number to quit:") ; 
     double price = askPrice.nextDouble(); 
     if (price<0) 
      break; 
     else { 
      totalPrice = totalPrice.add(new BigDecimal(String.valueOf(price)));  
     } 
     System.out.println(totalPrice.toString()); 
    } 
0

通常最好是編寫自己的代碼,而不是複製簡單示例的代碼。這樣你會學到很多東西。在代碼中你有一個while循環缺失的右大括號,我希望稍後有一個大括號關閉。

可以暫時通過獲取價格後拋出異常修復代碼:

double price = askPrice.nextDouble(); 
if(price < 0) throw new ArithmeticException("Negative Price!"); 

我不知道這是否是你想要的。