程序出问题了 求助

紫竹 2010-07-11 10:23:25
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test8 {
public static void main(String [] args)throws IOException{
System.out.println("1.后弦-海口.mp3"+"\n2.张峻宁-柠檬.mp3"+"\n3.谷歌浏览器 (2)"+"\n4.挂机锁 (2)");
BufferedReader buf;
buf=new BufferedReader(new InputStreamReader(System.in));
String [] a={"music\\后弦-海口.mp3","music\\张峻宁-柠檬.mp3","process\\谷歌浏览器 (2)","process\\挂机锁 (2)"};
String str;
int i;

while(true){
str=buf.readLine();
if(str.equals("quit"))
break;
else
i=Integer.parseInt(str);
Process p=Runtime.getRuntime().exec(a[i-1]);
for(long j=1;j<=10000000000000000L;j++){
System.out.println();
}
p.destroy();

}

}





出现的错误是:
Exception in thread "main" java.io.IOException: Cannot run program "music\后弦-
海口.mp3": CreateProcess error=193, %1 ??????Ч?? Win32 ??ó
at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:431)
at java.lang.Runtime.exec(Runtime.java:328)
at Test8.main(Test8.java:19)
Caused by: java.io.IOException: CreateProcess error=193, %1 ??????Ч?? Win32 ??ó

at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
at java.lang.ProcessImpl.start(ProcessImpl.java:30)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
... 4 more

谁帮帮忙看看,问题出在哪了?
还有 谁能不能告诉我在cmd中粘贴的快捷键是哪个?
还有谁能帮我求一下:Java编程:斐波那契(Fibonacci)数列的fib(99)/fib(100)


这是我的程序:
import java.math.*;
public class Lesson8 {
public static void main(String [] args){
for(int i=1;i<=100;i++){
System.out.println("fib("+i+")="+fib(i));
}
System.out.println(fib(99)/fib(100));
}

static BigInteger fib(int n){
BigInteger sum1=BigInteger.valueOf(0);
BigInteger sum2=BigInteger.valueOf(1);
BigInteger sum3=BigInteger.valueOf(1);
for(int i=2;i<=n;i++){
sum3=(BigInteger)sum1.add(sum2);
sum1=sum2;
sum2=sum3;
}
return sum3;
}

}
问题肯定出在了那个fib(99)/fib(100)上,问题是怎么解决这一问题。 怎么求出来?即在BigInteger数据类型中怎么进行除法? 结果要为double类型
...全文
149 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫竹 2010-07-14
  • 打赏
  • 举报
回复
给成了,呵呵,老大
我为0分怎么也给成了
哈哈
承蒙老大照顾
紫竹 2010-07-14
  • 打赏
  • 举报
回复
老大,非常谢谢你,虽然我没看懂你的程序,但我猜到了你的意思,受到你程序的启发,我改对了;
呵呵,解决了关键的地方,程序对了:
import java.math.*;
public class Lesson8 {
public static void main(String [] args){
double sum=0;
sum=fib(99).doubleValue()/(fib(100)).doubleValue();
System.out.println("sum="+sum);
for(int i=1;i<=100;i++){
System.out.println("fib("+i+")="+fib(i));
}
}
static BigInteger fib(int n){
BigInteger sum1=BigInteger.valueOf(0);
BigInteger sum2=BigInteger.valueOf(1);
BigInteger sum3=BigInteger.valueOf(1);
for(int i=2;i<=n;i++){
sum3=(BigInteger)sum1.add(sum2);
sum1=sum2;
sum2=sum3;
}
return sum3;
}

}
谢谢老大

至于第二个程序,我还是先缓一缓,以后应该还会碰到,不急
俺分也没多少,不过该给老大的,我看一下积分,怎么为0分,我给给试试
huntor 2010-07-13
  • 打赏
  • 举报
回复
cmd /c start ...

我的windows系统崩溃了,没办法验证,你自己试试
Execute an external program
huntor 2010-07-13
  • 打赏
  • 举报
回复
import java.util.*;
import java.math.*;

public class Fib {

private static HashMap<Integer,BigInteger> values = new HashMap<Integer,BigInteger>(){
{
put(0,BigInteger.ZERO);
put(1,BigInteger.ONE);
}
};

public static void main(String[] args) {
System.out.println((fib(99).doubleValue())/(fib(100).doubleValue()));
}

static BigInteger fib(int n) {
if(values.containsKey(n)) return values.get(n);
BigInteger sum = fib(n-1).add(fib(n-2));
values.put(n,sum);
return sum;
}
}
紫竹 2010-07-13
  • 打赏
  • 举报
回复
出现的错误是:
Exception in thread "main" java.io.IOException: Cannot run program "start": Crea
teProcess error=2, ?????????
at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:431)
at java.lang.Runtime.exec(Runtime.java:328)
at Test8.main(Test8.java:19)
Caused by: java.io.IOException: CreateProcess error=2, ?????????
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
at java.lang.ProcessImpl.start(ProcessImpl.java:30)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
... 4 more
紫竹 2010-07-13
  • 打赏
  • 举报
回复
老大,那个“start”我还是不会用,网上搜了,大部分都是用的 Runtime。getRuntime()。exec(……)
这是我的错误程序:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test8 {
public static void main(String [] args)throws IOException{
System.out.println("1.后弦-海口.mp3"+"\n2.张峻宁-柠檬.mp3"+"\n3.谷歌浏览器 (2)"+"\n4.挂机锁 (2)");
BufferedReader buf;
buf=new BufferedReader(new InputStreamReader(System.in));
String [] a={"start music\\后弦-海口.mp3","start music\\张峻宁-柠檬.mp3","start process\\谷歌浏览器 (2)","start process\\挂机锁 (2)"};
String str;
int i;

while(true){
str=buf.readLine();
if(str.equals("quit"))
break;
else
i=Integer.parseInt(str);
Process p=Runtime.getRuntime().exec(a[i-1]);
for(long j=1;j<=10000000000000000L;j++){
System.out.println();
}
p.destroy();

}

}
}
紫竹 2010-07-13
  • 打赏
  • 举报
回复
老大,还是有问题:
import java.math.*;
public class Lesson8 {
public static void main(String [] args){
BigDecimal sum=new BigDecimal(fib(99)).divide(new BigDecimal(fib(100)));
System.out.println("sum="+sum.doubleValue());
for(int i=1;i<=20;i++){
System.out.println("fib("+i+")="+fib(i));
}
}
static BigInteger fib(int n){
BigInteger sum1=BigInteger.valueOf(0);
BigInteger sum2=BigInteger.valueOf(1);
BigInteger sum3=BigInteger.valueOf(1);
for(int i=2;i<=n;i++){
sum3=(BigInteger)sum1.add(sum2);
sum1=sum2;
sum2=sum3;
}
return sum3;
}

}

提示错误:
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decima
l expansion; no exact representable decimal result.
at java.math.BigDecimal.divide(BigDecimal.java:1514)
at Lesson8.main(Lesson8.java:4)

huntor 2010-07-11
  • 打赏
  • 举报
回复
1 用 “start” 命令来启动
如 "start music\\后弦-海口.mp3"
2 使用 BigDecimal 做除法运算。
BigInteger fib99 = ...;
BigInteger fib100 = ...;
BigDecimal result = new BigDecimal(fib99).divide(new BigDecimal(fib100));
System.out.println(result.doubleValue());

ps. 使用 ArrayList 或者 Map 缓存一下中间结果,否则速度比较慢。

50,545

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧