当前位置:编程学习 > JAVA >>

一个加法的代码,感觉还是有些地方别扭,请高手完善!

package cn.xxy.iotestdemo;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class IoTestDemo_sum {
public static void main(String[] args) {
new Operator().start() ;
}
}
class Operator{
private String str = null ;
private int num = 0 ;
public void start(){
int num1 = this.getnum() ;
int num2 = this.getnum() ;
System.out.println("两数相加得:" + this.sum(num1,num2)) ;
}
private int getnum(){
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ;
System.out.print("请输入一个整数:") ;
try {
str = br.readLine() ;
num =Integer.parseInt(str) ;
} catch (Exception e) {
System.out.print("输入有误,") ;
getnum() ;
}
return num ;
}
private int sum(int num1,int num2){
return num1 + num2;
}
}
Java IO 加法 异常 --------------------编程问答-------------------- --------------------编程问答-------------------- 我看了没有什么别扭的地方啊!写得很不错啊 --------------------编程问答-------------------- 就功能本身来说,是很不错的一个代码了。

几个编码小建议:
1. private String str = null ; private int num = 0 ;可以去掉,使用局部变量
2. 尽量不要直接catch Exception,这里可以使用NumberFormatException
3. LZ可以试着在关键步骤增加注释 --------------------编程问答-------------------- 我是个新手,既然要输入整数为什么要 readline()? 干麻不直接 nextInt()? --------------------编程问答--------------------    public static void main(String args[]) {
        while (true) {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("请输入一个算式:");
            try {
                String str = br.readLine();
                ScriptEngineManager mgr = new ScriptEngineManager();
                ScriptEngine engine = mgr.getEngineByName("JavaScript");
                Object o = engine.eval(str);
                double d = Double.parseDouble(o.toString());
                System.out.println(str + " = " + d);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    } --------------------编程问答--------------------
引用 4 楼 Soiol 的回复:
我是个新手,既然要输入整数为什么要 readline()? 干麻不直接 nextInt()?
正在看IO,所以就全部都用的IO操作
nextInt() 是Scanner类的方法BufferedReader里面没得 --------------------编程问答-------------------- 除 --------------------编程问答--------------------
引用
引用 5 楼 tlfu_12344 的回复:
   public static void main(String args[]) {         while (true) {             BufferedReader br = new BufferedReader(new InputStreamReader(System.in));             System.out.print("请输入一个算式:");             try {                 String str = br.readLine();                 ScriptEngineManager mgr = new ScriptEngineManager();                 ScriptEngine engine = mgr.getEngineByName("JavaScript");                 Object o = engine.eval(str);                 double d = Double.parseDouble(o.toString());                 System.out.println(str + " = " + d);             } catch (Exception ex) {                 ex.printStackTrace();             }         }     }

 ScriptEngine 这个适用于Script开发中用到的一些类么,目前还没接触到 

嗯,java调用js的方法,像你这种计算很方便的 --------------------编程问答--------------------
引用 6 楼 valance_1 的回复:
Quote: 引用 4 楼 Soiol 的回复:

我是个新手,既然要输入整数为什么要 readline()? 干麻不直接 nextInt()?
正在看IO,所以就全部都用的IO操作
nextInt() 是Scanner类的方法BufferedReader里面没得

楼主也是新手吗?自学吗? 可以加个好友不? --------------------编程问答--------------------
private int getnum(){
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ;
        System.out.print("请输入一个整数:") ;
        try {
            str = br.readLine() ;
            num =Integer.parseInt(str) ;
        } catch (Exception e) {
            System.out.print("输入有误,") ;
            getnum() ;
        }
        return num ;
    }

这一块你用的应该算 递归 这样是不好的!原因是 当你开始调用这个方法的时候 就运用了内存 当你return之后释放内存,然而你写的没有 结束之后就有一次 开了另一个内存 现在工程量小,所以没有问题,建议用for来实现。 --------------------编程问答--------------------
引用 9 楼 Soiol 的回复:
Quote: 引用 6 楼 valance_1 的回复:

Quote: 引用 4 楼 Soiol 的回复:

我是个新手,既然要输入整数为什么要 readline()? 干麻不直接 nextInt()?
正在看IO,所以就全部都用的IO操作
nextInt() 是Scanner类的方法BufferedReader里面没得

楼主也是新手吗?自学吗? 可以加个好友不?

可以啊,在自学的 --------------------编程问答--------------------
引用 10 楼 u010816224 的回复:
private int getnum(){
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ;
        System.out.print("请输入一个整数:") ;
        try {
            str = br.readLine() ;
            num =Integer.parseInt(str) ;
        } catch (Exception e) {
            System.out.print("输入有误,") ;
            getnum() ;
        }
        return num ;
    }

这一块你用的应该算 递归 这样是不好的!原因是 当你开始调用这个方法的时候 就运用了内存 当你return之后释放内存,然而你写的没有 结束之后就有一次 开了另一个内存 现在工程量小,所以没有问题,建议用for来实现。

才开始学真没考虑到内存占用相关的问题,只是想到设计代码的时候一块代码实现一个功能,方便调用,你说的用for实现,是不是外部决定for循环次数(n个数字相加),在这个方法中实现加法? --------------------编程问答-------------------- 这个代码显然是有问题的,相同的操作 通过方法调用new了两次对象,这种细节要注意 --------------------编程问答-------------------- 你这段代码的明显问题是,当第一次你输入的不是整数的时候,不管你再输入多少次,返回值只是0.不要在异常处理中调用本函数,不要在异常处理中使用递归。 --------------------编程问答-------------------- 重新改写了一下:
class Operator {
private String str = null;

public void start() {
int[] nums = this.getnum();
System.out.println("两数相加得:" + this.sum(nums));
}

private int[] getnum() {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入一个整数:");
int num[] = new int[2];
int i=0;
while(true){
try {
str = br.readLine();
num[i] = Integer.parseInt(str);
i++;
System.out.print("请继续输入:");
if(i==2)break;
} catch (Exception e) {
System.out.print("输入有误,请重新输入:");
}
}
return num;
}

private int sum(int[] nums) {
int num = 0;
for(int i:nums){
num+=i;
}
return num;
} --------------------编程问答-------------------- 我感觉最别扭的地方就是没有用面向对象的思想来写。 --------------------编程问答--------------------
import java.util.Scanner;
 
class Operator{
    private String str = null ;
    private int num = 0 ;
    public void start(){
        int num1 = this.getnum() ;
        int num2 = this.getnum() ;
        System.out.println("两数相加得:" + this.sum(num1,num2)) ;
    }
    private int getnum(){
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个整数:") ;
        int num = scanner.nextInt();
        return num ;
    }
    private int sum(int num1,int num2){
        return num1 + num2;
    }
}
--------------------编程问答-------------------- class Operator{
    public static void main(String args[]){
     Scanner scanner = new Scanner(System.in);
     System.out.print("请输入一个整数:") ;
        int num1 = scanner.nextInt();
        System.out.print("请输入一个整数:") ;
        int num2 = scanner.nextInt();
        System.out.println("两数相加得:" + (num1 + num2)) ;
    }
} --------------------编程问答--------------------
import java.util.Scanner;
 
class Operator{
    public static void main(String args[]){
     Scanner scanner = new Scanner(System.in);
     System.out.print("请输入一个整数:") ;
        int num1 = scanner.nextInt();
        System.out.print("请输入一个整数:") ;
        int num2 = scanner.nextInt();
        System.out.println("两数相加得:" + (num1 + num2)) ;
    }
}
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,