java程序的一点小毛病
importjava.io.*;classS{doubler1;doublep=3.14;staticvoidarea(doubler1){doublearea=p*r1...
import java.io.*;
class S
{
double r1;
double p=3.14;
static void area(double r1)
{
double area=p*r1*r1;
System.out.println("area:"+area);
}
}
public class chu
{
public static void main(String[] args)
{
System.out.println("请输入r1=");
double r1;
r1=System.in.read();
S.area(r1);
}
}
我是刚学的Java 自己就编了一个求圆面积的小程序 但是不知错哪去了 还望高手指点啊!! 展开
class S
{
double r1;
double p=3.14;
static void area(double r1)
{
double area=p*r1*r1;
System.out.println("area:"+area);
}
}
public class chu
{
public static void main(String[] args)
{
System.out.println("请输入r1=");
double r1;
r1=System.in.read();
S.area(r1);
}
}
我是刚学的Java 自己就编了一个求圆面积的小程序 但是不知错哪去了 还望高手指点啊!! 展开
5个回答
展开全部
我调试了一下问题有三个:
第一:就是p那里,静态方法里不能引用非静态的变量所以要把p声明为静态的 static double p=3.14
第二:r1=System.in.read(),这句话会抛IOException,你没有加try catch语句改成
try {
r1=System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
也就是在外面套一层try catch 语句
第三:mian里面的r1没有赋初值 改成double r1= 0;
还有一个问题就是,如果按照你这个程序不做大的修改的话,
你在调用S.area(r1)时得把r1减去48,即S.area(r1-48)这样才能得到你想要的结果
原因:read方法把你的输入当做字符型的。所以你输入一个1,系统把他当做字符1,转换成int型时,就把1的ascci码返回了,相当于加了48,就变成49了,你就得不到正确的结果了
第一:就是p那里,静态方法里不能引用非静态的变量所以要把p声明为静态的 static double p=3.14
第二:r1=System.in.read(),这句话会抛IOException,你没有加try catch语句改成
try {
r1=System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
也就是在外面套一层try catch 语句
第三:mian里面的r1没有赋初值 改成double r1= 0;
还有一个问题就是,如果按照你这个程序不做大的修改的话,
你在调用S.area(r1)时得把r1减去48,即S.area(r1-48)这样才能得到你想要的结果
原因:read方法把你的输入当做字符型的。所以你输入一个1,系统把他当做字符1,转换成int型时,就把1的ascci码返回了,相当于加了48,就变成49了,你就得不到正确的结果了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你没有导入java标准输入类,要先创建标准输入类实例。在通过他输入半径
你的半径也应该是静态的变量啥,不然静态方法中不能调用、
例如:
import java.util.Scanner;
public class Test {
public static double PI = 3.14;
public static void area(double r1) {
double area = PI * (r1 * r1);
System.out.println("area:" + area);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入r1=");
double r = sc.nextDouble();
Test.area(r);
}
}
你的半径也应该是静态的变量啥,不然静态方法中不能调用、
例如:
import java.util.Scanner;
public class Test {
public static double PI = 3.14;
public static void area(double r1) {
double area = PI * (r1 * r1);
System.out.println("area:" + area);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入r1=");
double r = sc.nextDouble();
Test.area(r);
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的第一个class S应该编译都通不过的,你的area方法是static的,static方法中是不能调用非static属性的建议你可以把area方法的static去掉
然后在chu类的最后一行改成(new S()).area(r1);就行了
然后在chu类的最后一行改成(new S()).area(r1);就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
static void area(double r1)
{
double area=p*r1*r1;
System.out.println("area:"+area);
}
自己定义的变量r1有从形参得到值么?
形参没有把值赋给自己的成员变量r1
请检查ing...
{
double area=p*r1*r1;
System.out.println("area:"+area);
}
自己定义的变量r1有从形参得到值么?
形参没有把值赋给自己的成员变量r1
请检查ing...
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2009-12-07
展开全部
4楼正解!
参考资料: 张孝祥
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询