首页 新闻 会员 周边

学校作业是要 将Complex中字符串构造方法中可能会出现异常的语句进行异常处理,有没有大神帮我看一下

0
悬赏园豆:50 [已解决问题] 解决于 2020-04-21 11:27

public class Complex {
float real,imag;
// public Complex(String str) throws NumberFormatException
// {
//
// }
public Complex(String s) {
int i;
if (s!=null)
{
if(s.charAt(s.length()-1)'i') //有虚部
{
for(i=s.length()-2;i>=0;i--)
{
if (s.charAt(i)
'+'||s.charAt(i)=='-')
break;
}
if(i>0)//既有实部又有虚部
{
real=Float.parseFloat(s.substring(0, i));
}
else//只有虚部
{
real=0;

			}
			if(s.charAt(i+1)=='i')
			{
				if(i==-1)
					imag=1;
				else if(s.charAt(i)=='+')
					imag=1;
				else
					imag=-1;
			}
			else
			{
				if(i>=0)
					imag=Float.parseFloat(s.substring(i, s.length()-1));
				else
					imag=Float.parseFloat(s.substring(0, s.length()-1));
			}
		}
		else//无虚部
		{
			real=Float.parseFloat(s);
			imag=0;
		}
	}
}

// public Complex addComplex(Complex c)
// {
//
// }
public String toString()
{
String s="";
if(real!=0)
{
s=s+real;
}
if(imag!=0)
{
if(imag-1)
s=s+'-';
else if(imag
1)
s=s+'+';
else
s=s+imag;
s=s+'i';
}
return s;
}
public boolean equals(Complex c) {
return thisc||c!=null&&this.realc.real&&this.imag==c.imag;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Complex c1=new Complex("1.3-i");
Complex c2=new Complex("-i");
Complex c3=new Complex("2-3.45i");
Complex c4=new Complex("5.3456");
Complex c5=new Complex("i");
System.out.println(c1+"\n"+c2+"\n"+c3+"\n"+c4+"\n"+c5);
}

}

来这看大神的主页 来这看大神 | 初学一级 | 园豆:157
提问于:2020-04-19 09:05
< >
分享
最佳答案
1

你可以自定义一些异常,在方法内部做一一些判断,如果满足异常条件,则抛出自定义的异常,在调用方法的外侧捕捉异常:

public class BadFomatException: Exception // 具体要继承到那个异常类,请查看类库中默认有哪些合适的吧,直接继承Exception也可以,或者使用已有的而不使用自定义的异常也可以,看具体情况而定
{
    public void BadFomatException(string message):super(message){}
}
public class Complex
{
    public void Complex(string complex)
    {
        if(this.BadFomat(complex, out string error)) // 这是自己写的判断格式的函数
        {
             throw BadFomatException(error); // 这里可以扩展为根据不同的错误抛出不同的异常
        }
        // to be continue
    }
}
public static void Main(string[] args)  // 只是调用的地方
{
       Complex complex = null;
       try{
             var c = new Complex("hello");
       }catch(BadFomatException ex)
       {
          Console.WirteLIne(“格式错误:” + ex.Messages);
          Logger.error(ex.Messages);
       }
       catch(Exception ex)
       {     
            Console.WirteLIne(“意外错误:” + ex.Messages);
             Logger.error(ex.Messages);
       }
}

以上代码仅供参考,不保证编译能通过,没有测试

收获园豆:50
会长 | 专家六级 |园豆:12401 | 2020-04-20 09:28

好的,明白了,谢谢大神

来这看大神 | 园豆:157 (初学一级) | 2020-04-21 11:18
其他回答(1)
0

你这漏了好多符号啊,代码写的就不对,你编译器没报错?要对异常处理,加个try catch就好了

 

西红柿里没有番茄 | 园豆:645 (小虾三级) | 2020-04-19 09:49

没报错,我头一次在这上面提问,不知道为啥弄上去的代码乱七八糟的;有的地方是给注释掉了;OK,谢谢你了

支持(0) 反对(0) 来这看大神 | 园豆:157 (初学一级) | 2020-04-19 09:53

@来这看大神: 因为这个编辑器默认支持markdown标记的

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2020-04-20 09:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册