java40006的简单介绍
今天给各位分享java40006的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
JAVA程序未初始化变量.在线等
对于Java而言,变量主要分为两种:成员变量和局部变量。
类的字段(属性、成员)叫成员变量,方法里的变量叫局部变量,如
public class A {
public int a; // 成员变量 -------- 1
public void fn() {
int b = 0; // 局部变量 -------- 2
}
}
1、对于成员变量(语句1),默认赋值,即你在声明时,可以赋值,如果不赋值,JVM加载时会自动赋给默认值:整型为0,浮点型为0.0,引用型为null(注:String默认为null,跟其它引用型一样,并不是空串""!!!)
2、对于局部变量(语句2),不会默认赋值,声明就是声明,赋值就是赋值。你仅声明,未赋值,那么JVM仅在栈内存中声明了一块空间,并标识了其类型,但具体储存何值,这个并没有,日后你自己赋一个该类型的值进去。
所以你在使用成员变量时,仅声明后也可以用,因为有默认值,但使用局部变量时,仅声明的话,编译就会报错,说“未初始化变量”。
代码习惯上,你有两种选择。
一种是无论成员变量还是局部变量,都在声明的时候赋一个值给它,养成好习惯,好处在于当你移动变量位置,把一个成员变量挪动成局部变量时,不用考虑是否要初始化。
另一种是成员变量只声明,让JVM自动赋值,局部变量声明时根据需要赋值。
看看SUN的源码和一些开源的代码,大师们好像都是第二种习惯。第一种虽方便,但看起来总显得啰嗦。且大多时候你只需要声明出一个变量,然后去接收值,并不需要访问它,如:
int a; // 局部变量
......
......
a = fn(); // 接收fn方法的返回值,此时不用初始化a,也是合法的。
// 但如果是int b = a + 1; 这样就属于访问a,去取a的值,就不合法了。
请帮忙看下下面这个JAVA程序哪儿错了
变量定义太乱,建议多看点基础的书籍.
import java.util.Scanner;
public class Test40006 {
public static void main(String[] args) {
double ri, repeat; //ri要定义成double类型
// int temp, flag;
double eps, item, sum=0;
Scanner in=new Scanner(System.in);
repeat=in.nextInt();
System.out.println("repeat===="+repeat);
eps=in.nextDouble();
// item=1;
for(ri=1; ri=repeat; ri++){
// sum=0;
// flag=0;
// for(temp=1;item=eps;temp=temp+2)
item=1/(2*ri-1);
sum=sum+Math.pow(-1, ri+1)*item;
if(item eps){
System.out.println("条件极限 第"+ri+"次终止");
break;
}
System.out.println("第"+ri+"次循环 item="+item+" sum="+sum);
// flag++;
}
System.out.println((float)sum);
}
}
java求1-1/3+1/5-1/7+……
/*
* 创建日期 2012-4-2
*
* TODO 要更改此生成的文件的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
/**
* @author lenovo
*
* TODO 要更改此生成的类型注释的模板,请转至
* 窗口 - 首选项 - Java - 代码样式 - 代码模板
*
*/
import java.util.Scanner;
public class Test40006 {
public static void main(String[] args) {
int ri, repeat;
int temp, flag;
double eps, item, sum = 0;
Scanner in=new Scanner(System.in);
repeat=in.nextInt();
for(ri=1; ri=repeat; ri++){
eps=in.nextDouble();
/*--------------------*/
sum= count(repeat,eps);
/*---------------------*/
System.out.println((int)(sum*10000+0.5)/10000.);
}
}
/**
* @param repeat
* @param eps
* @return s 每一次的运行结果
*/
private static double count(int repeat, double eps) {
double s=0;
//首先计算 1-1/3+1/5-1/7+……
//需要考虑符号和分母变化
long count=0;//项目数 1是第一项 -0.3^3是第二项 ……
count=cishu(eps);//求出项目数
for (long j=1;j=count;j++){//把一个项目数的多项式的和计算出来
s+=fuhao(j-1,(double)1/(2*j-1));
}
return s;
// TODO 自动生成方法存根
}
/**
* @param eps
* @return m 运行次数 从1开始是第一项,-0.3……3是第二项
*/
private static long cishu(double eps) {
long m=0,n=1;
while(Math.abs((double)1/(2*n-1))=eps){
m++;n++;
}
return m;
}
/**
* @param count
* @return fu 每一项的值
*/
private static double fuhao(long count,double fumu) {
double fu=0;
fu=Math.pow(-1,count)*fumu;
return fu;
}
}
希望对你有帮助
java问题,急!!!
第一点,根据你的代码,我没看出来为什么要repeat这个参数。
第二点,我没跑你的代码,目测没什么问题,感觉上来说可能是精度丢失问题吧。
实在不行你再追问,我给你debug一下看什么情况。
java40006的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、java40006的信息别忘了在本站进行查找喔。
发布于:2022-11-27,除非注明,否则均为
原创文章,转载请注明出处。