题目
提示用户输入圆的半径(如果输入非法 提示用户重新输入)
打印圆的周长, 面积
代码
方法1
import java.util.Scanner;
public class Test02 {
public static void main(String[] args) {
System.out.print("请输入圆的半径: ");
Scanner sc = null; //创建对象放循环体外面,避免每次创建,减少资源浪费
while(true){ //循环
sc = new Scanner(System.in);
boolean b = sc.hasNextDouble(); //声明并定义,用户输入的为数字的时候为真
if(b){ //判断,如果用户输入的是数字,则为真,执行下面语句
double r = sc.nextDouble(); //声明并接收用户输入的数字
if(r <= 0 ){ //判断,r为负数的时候
System.out.print("输入错误,请输入正数: ");
continue; //跳过本次循环,执行下次循环
}
else { //判断,r为正数
double c = 2 * Math.PI * r; //周长
double s = Math.PI * Math.pow(r, 2); //面积
System.out.println("\n圆的周长为:" + String.format("%.2f", c)); //打印周长
System.out.println("圆的面积为:" + String.format("%.2f", s)); //打印面积
return;
}
}
else{ //判断,用户输入的是非数字
System.out.print("您输入的不是数字,请重新输入: ");
continue; //跳过本次循环,执行下次循环
}
}
}
}
运行结果
请输入圆的半径: a
您输入的不是数字,请重新输入: -4
输入错误,请输入正数: 5
圆的周长为:31.42
圆的面积为:78.54
方法2
使用try…catch…方法,控制输入的合法性
import java.util.Scanner;
public class Test03 {
public static void main(String[] args) {
System.out.print("请输入圆的半径: ");
boolean b = true;
while( b){
Scanner sc = new Scanner(System.in);
double r= 0.0;
try {
r = sc.nextDouble();
}catch(Exception e) {
System.out.print("输入错误,请输入数字: ");
continue;
}
if(r < 0){
System.out.print("输入错误,请输入正数: ");
continue;
}
double c = 2 * Math.PI * r;
double s = Math.PI * Math.pow(r, 2);
System.out.println( "\n圆的周长为:"+ String.format("%.2f", c) );
System.out.println( "圆的面积为:"+ String.format("%.2f", s) );
return;
}
}
}
运行结果
请输入圆的半径: a
输入错误,请输入数字: -4
输入错误,请输入正数: 5
圆的周长为:31.42
圆的面积为:78.54
要点
<1>
String.format( "%.2f", c ) //保留2位有效数字,返回的是 String 类型
Math.round(f*100)/100.0 //常用方法,返回的是 double 类型
<2>
sc.next() 与 sc.nextLine() 的区别
next()
不会读取字符前/后的 空格/Tab键/回车键,只读取字符;
开始读取字符(字符前后不算)直到遇到空格/Tab键/回车截止读取;因此不能得到带空格的字符串。
nextLine()
读取字符前后的空格/Tab键,回车键截止。