跪求java高手帮忙看看我的程序错在哪里,改好我追加20分

写一个程序计算男女的最佳体重。女性的体重基数是5英尺100磅,每增高1英寸加5磅,例如5'3",体重是100+15=115pounds。男性的体重基数是5英尺106磅,每... 写一个程序计算男女的最佳体重。女性的体重基数是5英尺100磅,每增高1英寸加5磅,例如5'3",体重是100 + 15 = 115 pounds。男性的体重基数是5英尺106磅,每增高1英寸加6磅,例如6'2",体重是106 + 14*6 = 190 (1英尺=12英寸)
你的程序要让他/她输入身高(英尺+英寸),然后计算最佳体重 (1磅=0.45359千克)设计步骤如下:
 声明变量
 输入数据
 转化英尺与英寸之间的关系(1英尺=12英寸)
 计算最佳体重
 输出结果
附加功能:
最佳体重+-15%以内都是健康的,输出最佳体重的+-15%的范围

程序:
import java.util.Scanner;

public class Weight {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str;
Scanner scan=new Scanner (System.in);
System.out.print("Please input your sex(F or M):");
str=scan.nextLine();
if(str!="F"||str!="f")
{
float i,height,weight,k,l=0;
System.out.print("Please input your height(height>=5):");
height=scan.nextFloat();
if(height>5)
{
for(i=height;i>1;i--);
for(k=(int)height;k>5;k--)l++;
weight=(i*10+l*12)*5+100;
System.out.print("Weight= "+weight+" pounds.");
}
else if(height==5)System.out.print("Weight= 100 pounds");
else System.out.print("Error...");
}
else if(str!="M"||str!="m")
{
float i,height,weight,k,l=0;
System.out.print("Please input your height(height>=6):");
height=scan.nextFloat();
if(height>5)
{
for(i=height;i>1;i--);
for(k=(int)height;k>5;k--)l++;
weight=(i*10+l*12)*6+106;
System.out.print("Weight= "+weight+" pounds");
}
else if(height==5)System.out.print("Weight= 106 pounds");
else System.out.print("Error...");
}
else System.out.print("Error...");
}

}
这个就是我写的程序,但输入题目内的数据时程序所输出的答案和题目的不一样,麻烦java高手帮忙看看我写的程序错在哪里,改好我追加20分
展开
 我来答
符华华符
推荐于2016-05-29
知道答主
回答量:35
采纳率:0%
帮助的人:13.7万
展开全部
是这个for(i=height;i>1;i--);语句错了,你是想取小数位吧。不过你在写这个语句的时候应该忘记了,i=1的情况,这个语句也是会中止的,到这个weight=(i*10+l*12)*5+100算式的时候,就会造成(1*10+1*12)*5+100。例如:输入6的时候,本来输出结果是160 pounds,结果输出是210 pounds.
你只要把程序改成这个就行了
import java.util.Scanner;

public class Weight {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str;
char st;
Scanner scan=new Scanner (System.in);
System.out.print("Please input your sex(F or M):");
str=scan.nextLine();
st = str.charAt(0);
if(st=='F'||st=='f')
{
float i,height,weight,k,l=0;
System.out.print("Please input your height(height>=5):");
height=scan.nextFloat();
if(height>5)
{

for(i=height;i>=1;i--);
for(k=(int)height;k>5;k--) l++;
weight=(i*10+l*12)*5+100;
System.out.print("Weight= "+weight+" pounds.");
}
else if(height==5)System.out.print("Weight= 100 pounds");
else System.out.print("Error...");
}
else if(st=='M'||st=='m')
{
float i,height,weight,k,l=0;
System.out.print("Please input your height(height>=6):");
height=scan.nextFloat();
if(height>5)
{
for(i=height;i>=1;i--);
for(k=(int)height;k>5;k--)l++;
weight=(i*10+l*12)*6+106;
System.out.print("Weight= "+weight+" pounds");
}
else if(height==5)System.out.print("Weight= 106 pounds");
else System.out.print("Error...");
}
else System.out.print("Error...");
}

}
追问
st = str.charAt(0);
能不能解释一下这一句的作用
追答
这句是调用String类型的charAt()方法使其返回一个char类型的。不知道你有没有试过你原来的程序,在输入f,F,m,M中任何一个值的时候,都是在调用
if(str!="F"||str!="f")
{
float i,height,weight,k,l=0;
System.out.print("Please input your height(height>=5):");
height=scan.nextFloat();
if(height>5)
{
for(i=height;i>1;i--);
for(k=(int)height;k>5;k--)l++;
weight=(i*10+l*12)*5+100;
System.out.print("Weight= "+weight+" pounds.");
}
else if(height==5)System.out.print("Weight= 100 pounds");
else System.out.print("Error...");
这段吧。到这步你应该明白,你输入的值都是处于str!="F"||str!="f",就是不等于"F"和"f"的状态。你可以把你的程序其中一段改成这样试试
if(str=="F"||str=="f")
else if(str=="M"||str=="m")
看到输出结果你应该明白了。这是因为是用==比较两个字符串相等其实是比较它们的是否放在同一个地址中,所以要比较内容是否相等应该用equals()方法。
而比较两个字符的内容相等是可以直接用==的。
百度网友845f74e61
2012-02-22 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1620万
展开全部
你的循环那块看差比较费劲。下边给出我修改的代码。

------------------------------------------------------------------------------------
import java.util.Scanner;

public class Weight {

// 女性的体重基数是5英尺100磅,每增高1英寸加5磅,例如5'3",体重是100 + 15 = 115 pounds。
// 男性的体重基数是5英尺106磅,每增高1英寸加6磅,例如6'2",体重是106 + 14*6 = 190 (1英尺=12英寸)
// 你的程序要让他/她输入身高(英尺+英寸),然后计算最佳体重 (1磅=0.45359千克)设计步骤如下:
public static void main(String[] args) {

Scanner scan = new Scanner(System.in);
System.out.print("Please input your sex(F or M):");
String strSex = scan.nextLine();
int interval = 0;
int cardinal = 0;
int height = 0;
// 忽略大小写的比较
if ("f".equalsIgnoreCase(strSex)) {
cardinal = 106;
interval = 6;
} else if ("M".equalsIgnoreCase(strSex)) {
cardinal = 100;
interval = 5;
}
System.out.print("Please input your height(height>=5):");
String strHeight = scan.nextLine();
String[] array = strHeight.split("[']");
height = Integer.parseInt(array[0]);
if (height <= 5) {
System.out.print("Weight= " + cardinal + " pounds");
} else {
// 12进制的转换 6-5 = 1 10的十二进制是12
height = Integer.parseInt((height - 5) + "0", 12);
if (array.length > 1) {
String tmp = array[1].split("[\'\']")[0];
height += Integer.parseInt(tmp);
}
cardinal += interval * height;
System.out.print("Weight= " + cardinal + " pounds");

// 最佳体重+-15%以内都是健康的,输出最佳体重的+-15%的范围
int range = (int) (cardinal * 0.15);
System.out.println("Healthy Range :" + (cardinal - range) + " - "
+ (cardinal + range));
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
七竹水木
2012-02-22 · TA获得超过280个赞
知道小有建树答主
回答量:206
采纳率:57%
帮助的人:157万
展开全部
没必要写那么复杂,很简单的,我帮你改了,你看看吧,有哪里不合适再问我。。。

import java.util.Scanner;

public class Weight {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str;
Scanner scan=new Scanner (System.in);
System.out.print("Please input your sex(F or M):");
str=scan.nextLine();
if(str!="F"||str!="f")
{
float i,height,weight,k,l=0;
System.out.print("Please input your height(height>=5):");
height=scan.nextFloat();
if(height>5)
{
//for(i=height;i>1;i--);
//for(k=(int)height;k>5;k--)l++;
weight=(height-5)*50+100;
System.out.print("Weight= "+(int)weight+" pounds.");
}
else if(height==5)System.out.print("Weight= 100 pounds");
else System.out.print("Error...");
}
else if(str!="M"||str!="m")
{
float i,height,weight,k,l=0;
System.out.print("Please input your height(height>=6):");
height=scan.nextFloat();
if(height>5)
{
//for(i=height;i>1;i--);
//for(k=(int)height;k>5;k--)l++;
weight=(height-5)*60+106;
System.out.print("Weight= "+(int)weight+" pounds");
}
else if(height==5)System.out.print("Weight= 106 pounds");
else System.out.print("Error...");
}
else System.out.print("Error...");
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
悠冥翡翠
2012-02-22
知道答主
回答量:1
采纳率:0%
帮助的人:1654
展开全部
很明显的语法错误
一、if(str!="F"||str!="f") 改成 if (str != "F" && str != "f")
如果写入小写f,还是返回true
二、for(i=height;i>1;i--);
直接;号结束,for语句没执行体
三、for(k=(int)height;k>5;k--)l++;
强转之后变为int,如果height=5.3,强转之后变成5,for语句也没执行
这3点改了,计算公式属于小学数学题,应该不成问题
另外,float i,height,weight,k,l=0;这种在小程序中影响不大,但在大型开发项目中,浮点运算要比整形慢很多,改用int的地方尽量分开声明,不要图方便
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式