编程计算图形的面积。
程序可以计算圆形、长方形、正方形的面积,运行时先输入图形的类型(1表示圆形、2表示长方形、3表示正方形),然后,判断用户输入图形的类型,对圆形输入半径,对长方形输入长和宽,对正方形输入边长,
以上参数的数据类型均为整型。
计算面积后将其显示出来,要求结果保留两位小数,PI设为3.14即可。
输入分为两部分,第一个数字是 1 表示圆形,2 表示矩形,3 表示正方形,然后是计算面积所需的相应参数。
要求对每个测试实例,在单独一行中输出图形的面积。 如果用户输入的图形类型不合法,给出错误提示:“Invalid Data!”。
我的解决代码是:
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int a = in.nextInt();
if(a==1){
int b= in.nextInt();
System.out.printf("%.2f",3.14*b*b);
}
else if(a==2) {
double b= in.nextDouble();
double c = in.nextDouble();
System.out.printf("%.2f", b*c);
}
else if(a==3) {
Double b= in.nextDouble();
System.out.printf("%.2f", b * b);
}
else{
System.out.print("Invalid Data!");}
}
}
虽然我完成了这个题目。但如果输入一部分数据却得不出正确结果让我感到自己技术的匮乏:
如果输入3 2 2,程序输出4.00。
这样是不对的,我在老师的带领下尝试了in.close(),但是不成功。它该如何在输入3 2 2的时候输出Invalid Data!呢?我解决不了,只有把问题公布了,有解答的可以私聊或者加我微信13778097887,我可以给感谢费5元。
你这里有几个错误
1.人家要求输入的都是整型,没必要使用Double
2.你这是各小的demo,Scanner
是否关闭,没有影响
3.你没有确定好你的输入方式,是一行全输入,还是逐行输入
Scanner
是阻塞式的,由用户来决定是否结束,应用程序只能选择阻塞读取或者丢弃,不能决定用户的下一步行为。Scanner
默认是空格分隔的,支持单行空格分隔输入和逐行回车确认输入
你的程序在逐行输入没有问题是因为你放弃了后续的读取,用户还没反应过来,程序结束了
在单行有问题是因为next
系列函数都是按照空格分开,逐个将输入给你的,你无法预知全部的输入,仅读取了自己需要的长度
下面的改进代码是两种方式,你自己选择吧
import java.util.InputMismatchException;
import java.util.Scanner;
/**
* <p>demo</p>
* <p>创建于 2024-09-25 14:42 14:42 </p>
*
* @author witt
* @version v1.0
* @since 1.0
*/
public class Demo {
public static void main(String[] args) {
// 方案1
multipleLine();
// 方案2
// singleLine();
}
/**
* 多行输入,使用换行符
*/
private static void multipleLine() {
try (Scanner in = new Scanner(System.in).useDelimiter(System.lineSeparator())) {
System.out.print("输入选项 >");
int option = in.nextInt();
double result;
switch (option) {
case 1:
System.out.print("计算圆形,输入半径 >");
int r = in.nextInt();
result = 3.14 * r * r;
break;
case 2:
System.out.print("计算长方形,输入长 >");
long l = in.nextLong();
System.out.print("输入宽 >");
long w = in.nextLong();
result = l * w;
break;
case 3:
System.out.print("计算正方形,输入边长 >");
long a = in.nextLong();
result = a * a;
break;
default:
System.err.print("Invalid Data!");
return;
}
System.out.printf("%.2f", result);
} catch (InputMismatchException e) {
System.err.print("Invalid Data!");
}
}
/**
* 单行输入
*/
private static void singleLine() {
try (Scanner in = new Scanner(System.in)) {
System.out.print("输入[选项 参数...] >");
String input = in.nextLine();
String[] args = input.split(" ");
int argLength = args.length;
if (argLength < 2 || argLength > 3) {
System.err.print("Invalid Data!");
return;
}
int option = Integer.parseInt(args[0]);
double result;
switch (option) {
case 1:
if (argLength != 2) {
System.err.print("Invalid Data!");
return;
}
int r = Integer.parseInt(args[1]);
result = 3.14 * r * r;
break;
case 2:
if (argLength != 3) {
System.err.print("Invalid Data!");
return;
}
long l = Integer.parseInt(args[1]);
;
long w = Integer.parseInt(args[2]);
;
result = l * w;
break;
case 3:
if (argLength != 2) {
System.err.print("Invalid Data!");
return;
}
long a = Integer.parseInt(args[1]);
result = a * a;
break;
default:
System.err.print("Invalid Data!");
return;
}
System.out.printf("%.2f", result);
} catch (NumberFormatException e) {
System.err.print("Invalid Data!");
}
}
}
该应用程序在模拟器中运行良好,但在手机上安装后,每次启动时都会崩溃,logcat没有显示错误。 发生这样的事我该怎么办?
必须创建一个java应用程序,该应用程序将确定并显示用户输入的数字总和。求和必须在用户希望的时间内进行。当程序结束时,求和必须显示如下,例如,用户输入3个数字:10、12、3=25 并且必须使用while循环
有个项目中有一个less文件,有明白是什么意思吗? 一直有下面的错误,这个怎么解决?
v-text-field怎么在输入的时候限制只能输入数字,而且除了数字以外输入其他字符都不显示在输入框里? oninput="value=value.replace(/[^0-9.]/g,'')" ,用这个在本地可以实现,但是更到线上不得行
有没有大佬来帮我看一看,是关于github actions的,我在实现一个推送代码到指定分支上时,会自动触发在远程目标服务器上面部署运行springboot项目,但是每一次运行到以下代码的时候: 它就会一直卡在这里。但是事实上,这一个项目是被正确运行了,监听端口也有信息,但是工作流中会报错: 我有一点不明白,部署成功之后,不就是应该断开ssh连接吗?有没有大佬解决一下? 因为这个地方报错,所以它工
错误如下: 02-11 13:24:31.561 526 2-5262/?E/AndroidRuntime:致命异常:main process:com.example.vicky.project,pid:5262 java.lang.runtimeException:无法启动活动ComponentInfo{com.example.vicky.project/com.example.vicky.pr