方法返回不正确的值?
Methods returning incorrect values?
只需编写一个简单的程序,要求用户输入圆形、矩形或三角形。然后它要求他们对形状进行适当的测量,然后使用正确的方法计算这个形状的面积。
然而,正确答案仅针对矩形方法生成。
无论输入什么,circle 方法总是生成 0.0,而 triangle 方法不乘以 0.5,而是 returns 只是 base*height。
进行了一些建议的更改,但我仍然遇到同样的问题。这是完整的代码。
import java.util.Scanner;
public class Area{
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
String shape = "";
boolean notAcceptable = true;
do {
System.out.print("What kind of shape? ");
shape = myScanner.next();
if(shape.equals("circle") || shape.equals("triangle") || shape.equals("rectangle")){
notAcceptable= false;
}else{
System.out.println("ERROR: Please input 'circle','rectangle' or 'triangle'.");
}
}while(notAcceptable);
double radius = 0.0;
double base = 0.0;
double height = 0.0;
boolean acceptable = false;
boolean acceptable1 = false;
boolean acceptable2 = false;
if(shape.equals("circle")){
System.out.print("Enter the radius of the circle: ");
while( !acceptable ){
//check if the input is a double.
if (myScanner.hasNextDouble()){
radius = myScanner.nextDouble();
acceptable = true;
break;
}
else{
System.out.println("ERROR: Input must be a double");
System.out.print("Enter the radius of the circle ");
myScanner.next();
}
}
}else{
System.out.print("Enter the height: ");
while( !acceptable1 ){
//check if the input is a double.
if (myScanner.hasNextDouble()){
height = myScanner.nextDouble();
acceptable = true;
break;
}
else{
System.out.println("ERROR: Input must be a double");
System.out.print("Enter the height: ");
myScanner.next();
}
}
System.out.print("Enter the length of the base: ");
while( !acceptable2 ){
//check if the input is a double.
if (myScanner.hasNextDouble()){
base = myScanner.nextDouble();
acceptable = true;
break;
}
else{
System.out.println("ERROR: Input must be a double");
System.out.print("Enter the length of the base: ");
myScanner.next();
}
}
}
if(shape=="circle"){
circleArea(radius);
}else if (shape=="triangle"){
triangleArea(base,height);
}else{
rectangleArea(base,height);
}
}//bracket that closes main method
public static void circleArea(double r){
double areaC= 3.14*r*r;
System.out.println("The area of your circle is "+areaC);
}
public static void rectangleArea(double b1, double h1 ){
double areaR= b1*h1;
System.out.println("The area of your rectangle is "+areaR);
}
public static void triangleArea(double b2, double h2){
double areaT = 0.5*b2*h2;
System.out.println("The area of your triangle is "+areaT);
}
}//bracket that closes class
首先,你其实不用三角形的面积乘以0.5
,代码应该是:
double area = b2*h2*0.5;
System.out.println("The area of your triangle is "+area);
同时检查您的输入是否正确。请post证明输入的正确性。
记得在Java中比较Strings
的时候,需要用到equals
的方法。通过使用 ==
,您正在执行 reference comparison.
试试这个:
if(shape.equals("circle")) {
circleArea(radius);
}else if (shape.equals("triangle")) {
triangleArea(base,height);
} else {
rectangleArea(base,height);
}
或者,为了防止出现空值并使其不区分大小写,大多数开发人员会采用以下方法:
if("circle".equalsIgnoreCase(shape) {
circleArea(radius);
} else if ("triangle".equalsIgnoreCase(shape)) {
triangleArea(base,height);
} else {
rectangleArea(base,height);
}
因为你使用的是==
,所以你总是在计算矩形的else
情况下失败。
正如其他人提到的,您的计算可能也有错误。
只需编写一个简单的程序,要求用户输入圆形、矩形或三角形。然后它要求他们对形状进行适当的测量,然后使用正确的方法计算这个形状的面积。
然而,正确答案仅针对矩形方法生成。
无论输入什么,circle 方法总是生成 0.0,而 triangle 方法不乘以 0.5,而是 returns 只是 base*height。
进行了一些建议的更改,但我仍然遇到同样的问题。这是完整的代码。
import java.util.Scanner;
public class Area{
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
String shape = "";
boolean notAcceptable = true;
do {
System.out.print("What kind of shape? ");
shape = myScanner.next();
if(shape.equals("circle") || shape.equals("triangle") || shape.equals("rectangle")){
notAcceptable= false;
}else{
System.out.println("ERROR: Please input 'circle','rectangle' or 'triangle'.");
}
}while(notAcceptable);
double radius = 0.0;
double base = 0.0;
double height = 0.0;
boolean acceptable = false;
boolean acceptable1 = false;
boolean acceptable2 = false;
if(shape.equals("circle")){
System.out.print("Enter the radius of the circle: ");
while( !acceptable ){
//check if the input is a double.
if (myScanner.hasNextDouble()){
radius = myScanner.nextDouble();
acceptable = true;
break;
}
else{
System.out.println("ERROR: Input must be a double");
System.out.print("Enter the radius of the circle ");
myScanner.next();
}
}
}else{
System.out.print("Enter the height: ");
while( !acceptable1 ){
//check if the input is a double.
if (myScanner.hasNextDouble()){
height = myScanner.nextDouble();
acceptable = true;
break;
}
else{
System.out.println("ERROR: Input must be a double");
System.out.print("Enter the height: ");
myScanner.next();
}
}
System.out.print("Enter the length of the base: ");
while( !acceptable2 ){
//check if the input is a double.
if (myScanner.hasNextDouble()){
base = myScanner.nextDouble();
acceptable = true;
break;
}
else{
System.out.println("ERROR: Input must be a double");
System.out.print("Enter the length of the base: ");
myScanner.next();
}
}
}
if(shape=="circle"){
circleArea(radius);
}else if (shape=="triangle"){
triangleArea(base,height);
}else{
rectangleArea(base,height);
}
}//bracket that closes main method
public static void circleArea(double r){
double areaC= 3.14*r*r;
System.out.println("The area of your circle is "+areaC);
}
public static void rectangleArea(double b1, double h1 ){
double areaR= b1*h1;
System.out.println("The area of your rectangle is "+areaR);
}
public static void triangleArea(double b2, double h2){
double areaT = 0.5*b2*h2;
System.out.println("The area of your triangle is "+areaT);
}
}//bracket that closes class
首先,你其实不用三角形的面积乘以0.5
,代码应该是:
double area = b2*h2*0.5;
System.out.println("The area of your triangle is "+area);
同时检查您的输入是否正确。请post证明输入的正确性。
记得在Java中比较Strings
的时候,需要用到equals
的方法。通过使用 ==
,您正在执行 reference comparison.
试试这个:
if(shape.equals("circle")) {
circleArea(radius);
}else if (shape.equals("triangle")) {
triangleArea(base,height);
} else {
rectangleArea(base,height);
}
或者,为了防止出现空值并使其不区分大小写,大多数开发人员会采用以下方法:
if("circle".equalsIgnoreCase(shape) {
circleArea(radius);
} else if ("triangle".equalsIgnoreCase(shape)) {
triangleArea(base,height);
} else {
rectangleArea(base,height);
}
因为你使用的是==
,所以你总是在计算矩形的else
情况下失败。
正如其他人提到的,您的计算可能也有错误。