首页 新闻 搜索 专区 学院

关于java的小问题,请高手帮忙解决,急

0
悬赏园豆:5 [已解决问题] 解决于 2012-11-08 18:26

这是一个关于复数的小程序,运行表示由字符串构造复制对象这个构造函数出现问题,求帮忙,运行提示的错误如下: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -2  at java.lang.String.substring(Unknown Source)  at 异常处理20121107.Complex2.<init>(Complex2.java:31)  at 异常处理20121107.Complex2.main(Complex2.java:100)

程序如下:

package 异常处理20121107;

public class Complex2 implements Comparable1

{

 public double real,imag;

 public Complex2(double real,double imag)  

{   

this.real=real;   

this.imag =imag;  

}

 public Complex2()

 {   

this(0,0);

 }  

public Complex2(Complex2 d)

 {

  this.real =d.real ;  

 this.imag =d.imag ;  

}

 public Complex2(String s)  

{  

 int i,n;

  n=0;  

 String d1,d2;

  for(i=0;i!='\0';i++)  

     {   

      n++;   

     if(s.charAt(i)=='+')   

          break;  

      }

  d1=s.substring(0, i-1);  

 d2=s.substring(i,n-1);  

 this.real =Double.parseDouble(d1);

  this.imag =Double.parseDouble(d2);

 }

 public String toString()

 {   

     String d1,d2,d3;

      d1=String.valueOf(this.real);

       d2=String.valueOf(this.imag);

         d3=d1+'+'+d2;   

        return d3;  

   }

 public double getModel()

 {   return Math.sqrt(real*real+imag*imag);  }

 public void add(Complex2 c)

 {   

   this.real+=c.real;

  this.imag+=c.imag;  

}

 public static Complex2 add(Complex2 c1,Complex2 c2)

 {   

Complex2 c3=null;

  c3.real=c1.real+c2.real;

  c3.imag=c1.imag+c2.imag;  

   return c3;

 }

 public void subtract(Complex2 c)  {   

  this.real-=c.real;  

 this.imag-=c.imag;

 }

 public static Complex2 subtract(Complex2 c1,Complex2 c2)

 {   

Complex2 c3=null;  

 c3.real=c1.real-c2.real;

  c3.imag=c1.imag-c2.imag;  

return c3;  

}

 public boolean equals(Complex2 c)  

{   

       if(real==c.real&&imag==c.imag)  

       return true;

       else  

        return false;  

}

 public boolean Comparable1(Complex2 c)

 {  

      if((this.real*this.real+this.imag*this.imag-c.imag*c.imag-c.real*c.real)>0)           return true;  

      else   

          return false;  

}

 public static void main(String args[])  

{  

 Complex2 c1=new Complex2(12.3,3.4);  

 Complex2 c2=new Complex2(3.8,3.6);  

 Complex2 c3=new Complex2(72.5,10.4);   

Complex2 c4=new Complex2(12.3,3.4);  

Complex2 c5=new Complex2("12+5i");  

 String s;     

System.out.println(c1.real+"+"+c1.imag+"i");

  System.out.println(c2.real+"+"+c2.imag+"i");  

 System.out.println(c3.real+"+"+c3.imag+"i");   

System.out.println(c4.real+"+"+c4.imag+"i");   

  System.out.println(c5.real+"+"+c5.imag+"i");   

  s=c1.toString();  

 System.out.println(s);

  System.out.println(c2.getModel());

  c3.add(c4);  

 System.out.println(c3.real+"+"+c3.imag+"i");  

 if(c1.equals(c4))  

  System.out.println("c1>c4");  

 else    

System.out.println("c1<c4");   

 if(c2.Comparable1(c3))   

 System.out.println("c2的模大于c3的模");  

 else   

 System.out.println("c2的模小于c3的模");

 }

}

左手、右手的主页 左手、右手 | 初学一级 | 园豆:78
提问于:2012-11-07 17:05
< >
分享
最佳答案
0

我刚才验证过了,是d1=s.substring(0, i-1)的参数i-1可能会得到一个负数的值,因为你前面使用的s.charAt(i)返回的i的值可能是0,而substring(int beginIndex,int endIndex)这个方法返回的是一个字串,改字串以索引为beginIndex的字符开始直到索引为endIndex的字符结束(包含索引为beginIndex的字符,不包含索引为endIndex的字符),你出错的地方正是在对这两个知识点的理解上。我看了你的题目真心没看懂你要做什么,所以也不好给你改代码以符合你的题目要求,你可以根据你的题目的要求做一些变动去解决上述两个问题。下述编译结果只是我强制用if语句限定执行条件后得到的一个结果:

收获园豆:5
郑毅 | 菜鸟二级 |园豆:235 | 2012-11-08 18:14

谢谢啊,出错误的地方是一个构造方法,想要完成由字符串构造复数对象,虽然没有错了,但是功能还是没有实现,总之谢谢啦!!!

左手、右手 | 园豆:78 (初学一级) | 2012-11-08 18:24

@左手、右手: 我贴出来的代码只是告诉你你的代码什么地方出了问题,出问题的原因是什么,是无法按你的题目要求实现你的功能的

郑毅 | 园豆:235 (菜鸟二级) | 2012-11-08 21:03
其他回答(2)
0

数组越界了,自己查查吧

angelshelter | 园豆:9676 (大侠五级) | 2012-11-07 17:18

谢谢 啊,能不能告诉我应该怎么改啊,刚学不怎么懂啊

支持(0) 反对(0) 左手、右手 | 园豆:78 (初学一级) | 2012-11-07 17:27
0

楼主是用C、C++的?

for(i=0;i!='\0';i++)  

改为:

for(i=0;i<s.length();i++)  

向往-SONG | 园豆:4853 (老鸟四级) | 2012-11-07 17:19

不是啊,用的myeclipse

支持(0) 反对(0) 左手、右手 | 园豆:78 (初学一级) | 2012-11-07 17:21

改过还是不对啊

支持(0) 反对(0) 左手、右手 | 园豆:78 (初学一级) | 2012-11-07 17:25

@左手、右手: 

哦,是substring这报错了。

可能要控制一下i-1不为负。

支持(0) 反对(0) 向往-SONG | 园豆:4853 (老鸟四级) | 2012-11-07 17:36

@向往-SONG: 额,具体要怎么搞啊,我弄了好一会还是搞不定啊

支持(0) 反对(0) 左手、右手 | 园豆:78 (初学一级) | 2012-11-07 17:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册