日期:2014-05-20  浏览次数:20722 次

待修改的java程序
麻烦各位帮我看看这个程序到底错在什么地方,具体思路是从键盘接收一个int型的数赋给num,p1调用jiech方法计算,代码如下:
import java.io.*;
public class People {
  public static void main(String args[]){
  int num;
  try{
  System.out.print("请输入一个数:");
  BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
  num=Integer.parseInt(input.readLine());
  }catch(IOException e){}
  People p1=new People();
  p1.jiech(num);
  }
  public void jiech(int i){  
  for(int j=1;j<=i;j++){
  for(int n=1;n<=j;n++){
  System.out.print(n+"*"+j+"="+n*j+" ");
  }
  System.out.println();  
  }  
  }
  }

------解决方案--------------------
用Scanner实现吧,这个类更合适
Java code


import java.io.*;
import java.util.Scanner;

public class People {
    public static void main(String args[]){
        int num=0;
        try{
            System.out.print("请输入一个数:");
//            BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
//            num=Integer.parseInt(input.readLine());
            Scanner scanner=new Scanner(System.in);
            num=scanner.nextInt();
        }catch(Exception e){
            e.printStackTrace();
        }
        People p1=new People();
        p1.jiech(num);
    }
    public void jiech(int i){
        for(int j=1;j<=i;j++){
            for(int n=1;n<=j;n++){
                System.out.print(n+"*"+j+"="+n*j+" ");
            }
            System.out.println();
        }
    }
}

------解决方案--------------------
探讨
还有,catch的地方“catch(IOException e){}”与“catch(Exception e){e.printStackTrace();}”
区别的哪里?为什么要改成“catch(Exception e){e.printStackTrace();}”?

------解决方案--------------------
你上面的程序没有什么特别大的问题,只是int num;没有给出初始化的值 ,在一些编辑器不让编译通过,改成int num=0;

Scanner是JDK里面专门为扫描数据给出的一个类,配合System.in对象可以扫描控制台的输入,具体你可以查看JDK里面 Scanner的API


探讨
能解释一下吗?“Scanner(System.in)”这个方法具体的作用是什么?我上面的那个具体错在哪?

------解决方案--------------------
楼主你的代码编译是有错,报:“可能尚未初始化变量 num”,你只要将num初始化
为0就行,其他逻辑部分没有错吧,至于采用什么方式输入,这个随便的。

至于为什么可能会导致num未被初始化,原因就是在使用IO进行输入时可能会有IOException,
故还未运行到num = Integer.xxx这一行程序就从try块跳到了catch块,所以,so……