java比较复杂的问题,高手来! 20

publicclasst{publicstaticvoidmain(String[]args){System.out.println(f(5));}publicstati... public class t
{
public static void main(String[] args)
{
System.out.println(f(5));
}
public static long f(int index)
{
if(index==1||index==2)
{
return 1;
}
long a=1;
long b=1;
long c=0;

for(int i=0;i<index-2;i++)
{
c=a+b; // c=a+b (0=1+1)
a=b; // a=b (把b的值赋给a,那a的值是几?是2吗?如果是2那b的值已经赋给了a了,那b还有值吗?)
b=c; // b=c (现在这个b是2还是0啊?是2是因为上面的a=b吗?)
}
(第一次循环的结果是:c=2 a=1 b=2。这个有个问题,如果第三步的b是因为a=b才等于2的话,那么a又为什么是1呢?不是a=b吗?)

return c;
}
}
问题我都写到//后面了。只算循环的第一次。谢谢
展开
 我来答
手机用户33099
2011-09-16 · TA获得超过486个赞
知道小有建树答主
回答量:705
采纳率:0%
帮助的人:410万
展开全部
一.JAVA程序传送到手机的方法:
JAVA程序传送到手机的方法有4种,分别是手机上网直接下载安装,通过电脑下载到本地后,然后通过读卡器,数据线,蓝牙,红外线传输JAVA程序到手机. 具体方法说明如下.
1.手机上网下载:
通过手机上网下载以及使用短信定购的方式,直接在手机的个人文档或者应用程序中找到(根据手机各不相同),无需在安装,直接可以在类似“我的文件夹”之类的选项找到。使用电脑下载就需要将文件传送到手机上。

2. 读卡器:
(1). 新买的卡,先在手机上格式你的 TF 卡:设置 —— 手机状态 —— 存储存储设备 —— 卡 —— 菜单键 —— 格式 OK
或先安装 TF 卡到手机上采取拍照,录象的方式,激活 TF 卡的文件夹。 如果是已经使用的就不必了...
(2) .将我的电脑 —— 工具 - 文件夹选项 - 查看中的,隐藏文件和文件夹 —— 选显示
(3) .打开我的电脑 —— 工具 - 文件夹选项 - 查看,把 “ 隐藏受保护的操作系统文件 ” 前面的勾去掉
(4).然后用读卡器打开你的 TF ,就可以看见 TF 卡上的 KJAVA 了。 copy JAVA程序(包括 *.JAR,*.JAD)到你 TF 卡的 KJAVA 目录里就行了
(5) .安装 TF 卡到手机。
(6) .进入手机 “ 游戏和应用程序)里安装新的程序 OK

这种问题出现的原因是你的电脑在下载的时候将jar文件处理为压缩文件了,因为.jar文件本来就是zip格式。解决办法有三:
(1)下载时在文件名后面加后缀.jar就可以修改为jar文件了,.jar文件可以直接传潦只安装?
(2)用电脑在DOS模式下把文件后缀zip改为jar再传到电话上安装就可以了!
(3)在你的电脑资源管理器窗口上工具--文件夹选项--查看---隐藏已知文件类型的扩展名前面的小勾去掉,再去看你下载的文件,把后面的.zip去掉(或者改成.jar)就可以了。
将SIS或JAR文件通过红外或蓝牙传至手机,手机收到后会有提示。打开收到的文件,按照手机的提示安装。安装后可以删除收件箱中的文件。
3.数据线传输:
通过安装购买手机时所附带的软件安装盘,安装其pc套件,用数据线接上手机与电脑,通过管理软件把JAVA程序文件*.JAD,*.JAR传送到手机上;MIDWAY2.8 也可以传输 JAVA 程序,但是需要开启 JAVA 设置中的 "JAVA 加载器 "

4.蓝牙传输:
(1) .把蓝牙适配器安上
(2) .手机蓝牙开启
(3) .双击电脑任务栏上的蓝牙图标,和手机匹配
(4) .再点任务栏上的蓝牙图标,直接发送文件到手机,手机自动识.

5.红外线传输
与蓝牙一样,也是可以使用鼠标来传输。只不过红外需要点对点,所以将手机红外功能打开后,与你所买的红外适配器对整齐,才能传输 。红外在XP、2K、2003的系统下无须驱动。

二、安装问题-相关说明
1. 如何安装Kjava程序
JAVA平台的手机软件一般有两个文件,一个是jar,一个是jad。 诺基亚等品牌的机器需要两个文件都传入手机中才能正常使用。而索爱等品牌的手机只需要一个jar文件就可以用了。具体情况要根据你自己的手机来确定。如果你是下载至电脑本地安装,你的手机需要用到.jad文件才能完成安装. 通过数据线,红外或蓝牙等方式把两个文件[.jar,.jad]存到手机上同一个目录中即可。

2.如何安装Symbian程序
Symbian软件安装包通常是.sis的压缩文件,其中包含许多组件文件。
安装步骤如下 :
(1) 安装文件可以通过蓝牙连接或红外连接发送至手机.
(2) 在手机收到信息后,打开新信息,选择打开->安装
(3) 按照提示一步一步操作下去,直到安装完成

3.如何安装微软SmartPhone智能手机软件
在使用微软操作系统的SmartPhone上安装软件,有三种方法:

(1)直接拷贝法
与电脑类似,在智能手机上也流行“绿色软件”一说。这一类软件只须将相关文件Copy到手机或存储卡上,然后建立一快捷方式,并将其拖入“Storage\windows\Start Menu”文件夹。欲使用该软件,只须进入“开始”菜单即可。小知识:与电脑不同,使用微软操作系统的SmartPhone并未自带资源管理器,因此须要自行安装,否则无法进行文件操作。推荐使用Explorer 2003。

(2)CAB文件安装法
如果下载的软件为*.CAB格式,那么请先用数据线或者读卡器将该文件Copy到SD卡等附加储存卡上(不推荐Copy到手机内置闪存上)。然后打开资源管理器(笔者使用的是Explorer 2003中文版),选中文件按OK键执行安装。一般来说,系统会弹出警告,点击确定即可。
有的软件可能会选择安装路径,选择安装路径,建议选择将软件安装到储存卡上。安装完毕后,就可以在开始菜单中找到该软件的快捷方式了。

(3)EXE文件安装法
前两种文件的安装都比较简单,但如果遇到*.EXE文件,那么安装起来就稍显繁复。首先,必须在电脑里安装Microsoft ActiveSync同步软件;其次,须要一根同步数据线或红外/蓝牙适配器(推荐使用数据线)。当这两者都齐备后,就可以进行安装了。
Microsoft ActiveSync联线后,双击运行*.EXE文件会看到一个安装界面。选择一个目录,单击安装,安装文件会自动解压并传送数据至手机。在电脑屏幕上弹出提示时,就要换为手机操作了。按照手机屏幕上的提醒,选择将软件安装在手机或者储存卡上即可。
安装java程序要有两个文件,一个是JAR和JAD, 但拷贝下来的游戏只有JAD这个文件和一个JAR压缩文件.首先把JAR压缩文件(压缩文件不要解压)和JAD文件下载到电脑里面去,把这两个文件直接拷贝到手机里的其它文件这个目录下,或者在手机储存卡other files这个文件夹里,然后在复制到手机的其他文件夹就可以了,在手机的其他文件里你会看到一个JAD文件和一个JAR的文件,这样的话JAD和JAR文件都已经具备了,下面就可以安装了!

4.替换补丁
有的软件的压缩包里还有几个软件名.rsc或软件名.app ,这是破解补丁或汉化补丁。替换之后就能把共享软件破解,把英文软件汉化。用红外,蓝牙,pc套件,读卡器中的一种,把 软件名.rsc或软件名.app 传到手机上,用手机上的文件管理器,将他们剪切,粘贴到 /system/apps/软件名/ 目录下,覆盖就可以了。
再打开,是不是就好了.

三、安装例子
1、诺基亚手机安装MP手机浏览器JAVA程序
安装 JAVA程序先要传输软件,安装的步骤如下:
(1)先下载 JAVA程序 ;
(2)就是选择"Java加载器",手机显示"请插上电缆,然后再将数据线插上手机里,连接电脑,手机会显示"Jal连接正在启动"等字,跟着回到原界面就OK啦。
(3)运行Midway 2.8汉化版,会提示设置端口,选"是"进行端口设置,但要与电脑设备管理器里的"Motorola USB Modem"的端口保持一致,步骤如下:
A、提示,是否要设置端口,选择“是”,
B、设置Midway 2.8的端口,须与电脑设备管理器里的“Motorola USB Modem”的端口保持一致,
C、端口设置好之后就能看到Midway 2.8的主界面,然后选"打开"
D、打开jad文件之后就可看到JAVA程序的信息了,选发送按扭就OK啦,
(4)然后再等Midway 2.8的进程被蓝色格仔填满后就表示下载完
成啦,同时也会显示"Downloading completed",手机上会显示下载完成,正在安装,安装完后显示是否运行程序这安装成功啦。

2. 三星手机安装MP手机浏览器JAVA程序
对于一般的三星手机,从电脑下载和安装JAVA程序的比较复杂,需要一定的技术,大家可以到三星官方论坛查询详细资料。
刚入门的玩家我们推荐使用WAP下载或者手机互传来获得MP手机浏览器JAVA程序(jad,jar)
从WAP上下载的游戏手机会自动安装。一般来说会有一些友好的提示如:
(1)是否安装JAVA程序?
下载下来当然是要安装的,选择“是”。
(2)JAVA程序未经过(签名/认证,或者之类的提示),是否继续?
同样选择“是”。
(3)有的手机会要求你选择安装的路径,一般我们安装在“游戏”、“百宝箱”这些地方,总之要找一个你的其它JAVA程序所在的位置或者一个你能找到的地方。

3.多普达(智能手机安装MP手机浏览器JAVA程序
多普达手机采用的是Windwos操作系统,现以多普达575为例,来说明JAVA游戏安装方法,其他Windwos操作系统的手机请参考该文。移动定制的Windwos手机内置了百宝箱程序,其使用方法和其他手机的方法一样,在此就不细说了。没有内置百宝箱的Windows手机,如多普达515就要使用第三方的JAVA模拟器。而且我们在实际使用中发现,内置的百宝箱运行起来效果并不理想。所以对于使用Windows系统的智能手机,我们推荐使用第三方的JAVA模拟器。这里有2个模拟器软件供大家选择:JMM和DMIDP2。
JMM:JMM的兼容比较好,对声音的支持也不错,但运行时会占用很大的系统资源,而且对汉字的支持不是很好。
DMIDP2:相比JMM来说,占用的系统资源少,运行的速度还不错,而且特别是对MP手机浏览器的支持非常好,可以全屏使用,对于中文显示的支持也比JMM好一些。
安装:
2款软件都是绿色软件,直接拷贝到卡上即可。对于JAR和JAD文件,还需要在文件浏览器(以Resco Explorer为例)中设置文件关联:
(1)选中JAR文件,点Action→Open→Open With来选择应用程序。
(2)由于是绿色软件,系统还没有登记,所以要手动选择应用程序。选Menu→Browse。
(3)再选择Menu→Browse Folder。
(4)选择模拟器所在的文件夹,打开,就能看到应用程序。
(5)选择DMIDP2,点Select。最后选Done。
(6)这样以后下载了JAVA程序直接确认打开,系统就会调用DMIDP2自动安装了。

4.某些特定机型安装方法,如:
1) 三星 SGH-E908 -JAVA安装方法
第一步从网上下载MP手机浏览器的jar,jad安装文件。
第二步向手机传送游戏jar,jad安装文件。如用数据线将手机与电脑连接,在电脑的资源管理器中出现TF卡的盘符,把电脑里的jar,jad文件复制到TF卡中。
第三步安装MP手机浏览器。断开手机与电脑的连接,从手机“我的收藏”找到并点击.jar文件,就可以把这个游戏安装到手机里,你可以选择游戏图标所在的位置(办公、多媒体、应用等程序表的子文件夹)。安装完毕.jar文件自动消失。
第四步运行MP手机浏览器。从手机“程序表”打开程序,就随你上网了.其它.jar格式的程序、电子书安装方法与此相同。
(注意待机状态下输入:*#9998*5282# 选择第三个选项,密码是:235282)

2)三星U608 JAVA程序安装方法
第一、如果你没有内存卡,即TF卡,必须下载PC套件连接手机。然后把jar和jad文件通过数据线传输到手机本机内存文件夹“其他文件夹”也就是中。
第二、如果你有内存卡,可以尝试使用读卡器或手机USB设定选择“大容量存储器”。把jar和jad文件一起放进手机TF卡的"其他文件"夹里.即“other files” 文件夹里。然后打开文件夹把两个文件都移动到手机自身的“其他文件夹”
最后,在待机状态下输入*#9998*4678255#,点JAD,然后安装。注意必须是有JAD文件的,一定要是存在本机(切记是本机)的其他文件夹里。

3)联想i908JAVA程序安装方法
(1) 先拨####5282# (如果没装过JAVA程序,显示空文件夹)
(2) 插USB
(3) 选储存装置选项(这时电脑显示可移动磁盘出现)
(4) 打开可移动磁盘
(5) 选页面上方的工具-文件夹选项-查看-把隐藏受保护的操作系统文件(推荐)前面的勾去掉-选则显示所有文件和文件夹-应用
(6) 这样在电脑上就可以看到midlets这个文件夹了,将JAVA游戏的JAD及JAR文件拷到这个文件夹中(注意一定要把同一个游戏的jad和jar两个文件都放入手机,不要解压jar文件,如果没有JAD的去下个转换软件)
(7) 安全删除硬件(移动硬盘)拔掉USB手机端
(8) 再拨####5282#,会出现JAVA文件夹,点选项-安装
(9) 安装好的游戏在娱乐多媒体-JAVA文件夹里
百度网友e7fe567
2011-09-15 · TA获得超过397个赞
知道小有建树答主
回答量:154
采纳率:0%
帮助的人:143万
展开全部
其实那个=是赋值的意思。a=1就是说把1赋给a。
就是说这里有个存储空间,给他起了个名字为a。a=1,形象的说就是把1放在那个存储空间里面。a=2,就是把里面的1拿掉,把2放在里面。
第一次循环
c=a+b;此时c=1+1=2,a=1,b=1;
a=b;此时把b里面存储的1给a,所以a=2。b=1。b里面当然还有值啊。a=b是说a里面放一个和B相等的数值。
b=c;此时b=2,c=2;
第二次循环
c=a+b;c=1+2=3;
a=b;因为b=2,所以a=2;
b=c;b=3;
第三次循环
c=a+b=2+3=5;
a=b=3;
b=c=5;

楼主 解释得够详细了吧。。谢谢采纳~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
benjamin519
2011-09-15 · TA获得超过777个赞
知道小有建树答主
回答量:413
采纳率:90%
帮助的人:193万
展开全部
看了下,不复杂吧,一个一个来(貌似FISH):
1:a=b; // a=b (把b的值赋给a,那a的值是几?是2吗?如果是2那b的值已经赋给了a了,那b还有值吗?)
我的回答:把b的值赋给a,a的值为1(因为你把b初始化为long a =1);把X的值赋给Y,X的值不会改变。
2:b=c; // b=c (现在这个b是2还是0啊?是2是因为上面的a=b吗?)
我的回答:b当然是2了,0已经被改写了,因为你的c=a+b,以的值改写成2,然后把2赋给了b。
3:(第一次循环的结果是:c=2 a=1 b=2。这个有个问题,如果第三步的b是因为a=b才等于2的话,那么a又为什么是1呢?不是a=b吗?)
我的回答:你的如果不成立。
注意语句的顺序,程序是一条一条语句执行下来的!相当于“串”行,而不是“并”行。
long a=1;
long b=1;
long c=0;
c=a+b; // 这里把a+b的和赋给了c,所以是c(2) = a(1) +b(1),括号里的是变量的值。
a=b; // 这里是把b的值赋给了a,回头看c=a+b这条语句并没有改写a,b的值,所以这里是a(1)=b(1)
b=c; // 这里把c的值赋给了b,回头看第一条语句,c的值已经改成了2,所以这里是把2的值赋给了b,b之前的值(1)就被改写了。
兄台,你滴明白?
如果你想看每执行一步的结果,你可以用IDE设断点,一步一步看,另外一种方法就是在每句后面写输出语句查看。例如:
for(int i=0;i<index-2;i++)
{
c=a+b;
System.out.println("c="+c,"a="+a,"b="+b);
a=b;
System.out.println("a="+a,"b="+b);
b=c;
System.out.println("c="+c,"b="+b);
这样就可以查看每一步的赋值情况了,适合新手使用,hoho
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
清心又谦恭丶布丁9
2011-09-15 · TA获得超过6604个赞
知道小有建树答主
回答量:1247
采纳率:100%
帮助的人:1856万
展开全部
public static void main(String[] args) {
System.out.println(f(5));
}

public static long f(int index) {
if (index == 1 || index == 2) {
return 1;
}
long a = 1;
long b = 1;
long c = 0;

for (int i = 0; i < index - 2; i++) {
c = a + b; // c=a+b (2=1+1)
a = b; // a=b (针对这个我解释下,这里是把b的值赋值给a,所以a=1,但是b的值,现在没有改变,所以还是b=1)
b = c; // b=c (这里和上面的差不多,是把c的值赋值给b,因为c=2,所以b=2,同样的c的值还没有变)
}
// (所以第一次循环完的结构是:c=2 a=1 b=2。)
//第二次
//c=a+b(3=1+2)
//a=b=2;
//b=c=3;
//第二次循环完是c=3,a=2,b=3

//第三次
//c=a+b=5,后面不考虑,
//其实主清楚的可以打断点高度,一试就清清楚楚

return c;
}
追问
不是把b的值赋给a了吗?为什么a 和 b的值都没变啊?没变这样写有什么意义?
追答
看来楼是是没有理解基本数据类型了。
int a;
int b=2;
a=b;
这个就是经典的基本数据了
b是把值赋给a
a=2,但是b的值没有任何改变

再往深了讲
int a;
int b=2;
a=b;
a=3;
这时a=3,b=2,因为a只是取刚才b的值,没有直接等地址。

如果是引用类型的话,那就不一样了
int [] a=new int[]{1};
int [] b=a;
b[0]=2;
这是a[0],也是2.因为他们引用的是相同的地址。

建议楼主看看地址相关的知识,或者想深入的话,我们可以再慢慢聊聊。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Sunny芸
2011-09-15 · 超过15用户采纳过TA的回答
知道答主
回答量:74
采纳率:0%
帮助的人:41.8万
展开全部
long a=1,b=1,c=0;
进入循环int i=0的时候,c=a+b,也就是c=2 a=b,a=1, b=c,b=0;
int i=1的时候,c=a+b,也就是c=1+0=1 a=b,a=0, b=c,b=2;
int i=2的时候,c=a+b,也就是c=0+2=2 a=b,a=2, b=c,b=1;
因为i<index-2即i<3所以循环结束
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式