java算球的体积_[HackerRank]Java計算體積(Java Calculating Volume)

題目描述

輸入一個整數ch,這個ch整數值所代表的意義如下:

ch=1表示要計算邊長為a的正方體體積。

ch2表示要計算長、寬、高為l、b、h的長方體體積。

ch3表示要計算半徑為r的半球體體積。

ch4表示要計算半徑為r、高為h的圓柱體體積。

撰寫一個Calculate類別,分別按照上面的要求實作出不同的方法,要將計算結果省略至小數點第3位來輸出。

若輸入的長度小於0,要輸出「java.lang.NumberFormatException: All the values must be positive」。

原題網址

輸入格式

第一行輸入一個整數T,表示測試資料的數量,接下來的T組資料,一開始要先輸入ch值,範圍在1到4之間(包含1和4),接著依照ch的不同而有以下幾種不一樣的輸入: ch=1,接下來的一行要輸入正方體的長度a。

ch=2,接下來的三行要分別輸入長方體的長度l、寬度b、高度h。

ch=3,接下來的一行要輸入半球體的半徑r。

ch=4,接下來的兩行要分別輸入圓柱體的半徑r和高度h。

a、l、b、h、r的值皆在-100到100之間(包含-100和100)。

輸出格式

計算每組測試資料,輸出四捨五入至小數點後第三位的計算結果。

範例輸入1 2

1

4

4

67.89

-98.54

範例輸出1 64.000

java.lang.NumberFormatException: All the values must be positive

額外解釋1

在這兩組測試資料中,第一組測試資料的ch為1,所以是要計算正方體的體積。接下來輸入的a為4,正方體體積算法為: a * a * a = 4 * 4 * 4 = 64.000

第一組測試資料的ch為4,所以是要計算圓柱體的體積,但輸入的圓柱體高度是負數,因此輸出「java.lang.NumberFormatException: All the values must be positive」。

範例輸入2 1

3

1.02

範例輸出2 2.223

解題概念

實作Calculating類別來處理標準輸入串流和實際用來計算體積的物件。實作Volume類別來計算體積。實作Printer類別來處理小數點輸出和輸入負數的輸出。

參考答案 import java.io.IOException;

import java.security.Permission;

import java.util.Scanner;

class Printer {

public void display(final double volume) throws IOException {

if (volume > 0) {

System.out.printf("%.3f%n", volume);

} else {

System.out.println("java.lang.NumberFormatException: All the values must be positive");

throw new IOException();

}

}

}

class Volume {

public double main(final int a) {

return a * a * a;

}

public double main(final int l, final int b, final int h) {

return l * b * h;

}

public double main(final double r) {

return 2 * Math.PI * r * r * r / 3;

}

public double main(final double r, final double h) {

return Math.PI * r * r * h;

}

}

class Calculate {

private static final Scanner sc = new Scanner(System.in);

private static final Volume v;

public static final Printer output = new Printer();

static {

v = new Volume();

}

public static Volume get_Vol() {

return v;

}

public int getINTVal() {

return sc.nextInt();

}

public double getDoubleVal() {

return sc.nextDouble();

}

}

public class Solution {

public static void main(final String[] args) {

Do_Not_Terminate.forbidExit();

try {

final Calculate cal = new Calculate();

int T = cal.getINTVal();

while (T-- > 0) {

double volume = 0.0d;

final int ch = cal.getINTVal();

switch (ch) {

case 1:

final int a = cal.getINTVal();

volume = Calculate.get_Vol().main(a);

break;

case 2: {

final int l = cal.getINTVal();

final int b = cal.getINTVal();

final int h = cal.getINTVal();

volume = Calculate.get_Vol().main(l, b, h);

break;

}

case 3: {

final double r = cal.getDoubleVal();

volume = Calculate.get_Vol().main(r);

break;

}

case 4: {

final double r = cal.getDoubleVal();

final double h = cal.getDoubleVal();

volume = Calculate.get_Vol().main(r, h);

break;

}

default:

break;

}

cal.output.display(volume);

}

} catch (NumberFormatException e) {

System.out.print(e);

} catch (IOException e) {

e.printStackTrace();

} catch (Do_Not_Terminate.ExitTrappedException e) {

System.out.println("Unsuccessful Termination!!");

}

}

}

class Do_Not_Terminate {

public static class ExitTrappedException extends SecurityException {

}

public static void forbidExit() {

final SecurityManager securityManager = new SecurityManager() {

@Override

public void checkPermission(final Permission permission) {

if (permission.getName().contains("exitVM")) {

throw new ExitTrappedException();

}

}

};

System.setSecurityManager(securityManager);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值