public class MinMax2
{
 public static void main(String[] args)
 throws java.io.IOException
 {
  int a;
  int max,min;
  a = System.in.read();
  int[] nums = new int[a];
  for(int i = 0;i < nums.length;i++)
  {
   nums[i] = System.in.read();
  }
  max = min = nums[0];
  for(int i = 1;i < nums.length;i++)
  {
   if(nums[i] < min)
       min = nums[i];
   if(nums[i] > max)
       max = nums[i];
  }
  System.out.println("The max of your input is:" + max);
  System.out.println("The min of your input is:" + min);
 }
}
我想做一小段程序,功能是打印数组中的最大与最小元素的值。
要求:
 1、数组的长度从键盘输入;
 2、数组中元素的值从键盘输入;
以上是我写的程序,编译时没有问题,我想问的是当程序执行到
for(int i = 0;i < nums.length;i++)
  {
   nums[i] = System.in.read();
  }
时我输入5个数字后,我感觉程序就应该自动给出结果。可是我的程序一点反应没有,继续输入数据仍然没有反应。
请问给位这个程序的错误在哪,怎么解决??

解决方案 »

  1.   

    输入数字后,你是按空格,还是ENTER?
    输完后,多按几下ENTER能输出最后的那两句话,但值有问题,不是最值,测试是发现输入的值输出时有问题,不是输入的那个值,自己试试吧,
      

  2.   

    不对啊,我按了好多的ENTER可是就是一点反应都没有,能帮我解释一下这是为什么吗????
      

  3.   

    这个你在哪里运行的?
    在DOS下应该是可以的,但是在eclipse就不行。
      

  4.   

    看看下面我写的代码,保证没问题:public class Test {
    public static void main(String[] args) throws java.io.IOException {
    int a;
    int max, min;
    System.out.print("请输入数组个数:");
    a = System.in.read();
    int[] nums = new int[Integer.parseInt((char)a+"")];
    for (int i = 0; i < nums.length; i++) {
    System.out.print("共需要输入"+nums.length+"个数字,请输入第"+(i+1)+"个数字:");
    String inputStr = (char)System.in.read()+"";
    try{
    nums[i] = Integer.parseInt(inputStr);
    }catch(NumberFormatException e){
    boolean needReInput = true;
    do{
    try{
    if(inputStr.matches("(\\s*)|(\r)|(\n)|(\r\n)")){
    inputStr = (char)System.in.read()+"";
    }else if(!inputStr.matches("\\d+")){
    System.out.print("您输入的不是数字,请重新输入:");
    inputStr = (char)System.in.read()+"";
    }
    nums[i] = Integer.parseInt(inputStr);
    needReInput = false;
    }catch(NumberFormatException e1){

    }
    }while(needReInput);
    }
    }
    max = min = nums[0];
    for (int i = 1; i < nums.length; i++) {
    if (nums[i] < min)
    min = nums[i];
    if (nums[i] > max)
    max = nums[i];
    }
    System.out.println("The max of your input is:" + max);
    System.out.println("The min of your input is:" + min);
    }
    }
      

  5.   

    程序没有按照你想想的那样执行,是因为你对System.in.read();这句返回值理解有误造成的,
    这句返回的是输入的一个字符的ASCII码,如果你第一次输入的是1,这是后a并不是我们想象中的1,而是1的ascii码,即49,那么,你就必须输入49个字符(包含任何字符),这样才能有输出,而且比较出来的也并不是你输入的那些数字,而是那些你输入的字符的ascii码的比较。
      

  6.   

        其实很多时候,我们多写几行System.out.println信息提示或者多看下API文档,或者多进行debug,这些问题自己都能搞定的。
        不过还是感谢你让我也清楚地认识了System.in.read()这个方法。
      

  7.   

    a = System.in.read();返回值 a 是你输入字符的ascii码 而且read只能read1一字符package cn.com.year2009.month04.day07;import java.io.BufferedReader;
    import java.io.InputStreamReader;/**
     * Created by IntelliJ IDEA.
     * User: Administrator
     * Date: 2009-4-7
     * Time: 22:25:26
     * To change this template use File | Settings | File Templates.
     */
    public class MinMax2 {    public static void main(String[] args) throws java.io.IOException {
            int a;        
            int max, min;        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));        System.out.println("取得元素中最大与最小值程序");
            System.out.print("请输入需要比较的元素个数:");
            a=getInputNum(br);
            System.out.println();
            int[] nums = new int[a];
            for (int i = 0; i < nums.length; i++) {
                System.out.print("请输入第"+(i+1)+"个数字:");
                nums[i]=getInputNum(br);
                System.out.println();
            }
            max = min = nums[0];
            for (int i = 1; i < nums.length; i++) {
                if (nums[i] < min)
                    min = nums[i];
                if (nums[i] > max)
                    max = nums[i];
            }
            System.out.println("The max of your input is:" + max);
            System.out.println("The min of your input is:" + min);
        }    private static int getInputNum(BufferedReader br) {
            int ret;
            while (true) {
                try {
                    ret=Integer.parseInt(br.readLine());
                    break;
                } catch (Exception e) {
                    System.out.print("输入字符不是数字,请重新输入:");
                }
            }
            return ret;
        }}
      

  8.   

    受7楼启发,我之前写的代码不能完全实现楼主的本意,现修改如下,应该可以了,哈哈,自己一起稍上了public class Test {
    public static void main(String[] args) throws java.io.IOException {
    int a;
    int max, min;
    System.out.print("请输入数组个数:");
    String inputStr = null,strA = "";
    inputStr = (char)System.in.read()+"";
    while(inputStr.matches("\\d")){
    strA += inputStr;
    inputStr = (char)System.in.read()+"";
    }
    a = Integer.parseInt(strA);
    int[] nums = new int[a];
    boolean isNextNum = true;
    for (int i = 0,j=0; i < a && j<a ; i++) {
    if(isNextNum){
    System.out.print("共需要输入"+a+"个数字,请输入第"+(i+1)+"个数字:");
    }
    strA = "";
    while(inputStr.matches("\\d")||(strA.equals("") && inputStr.matches("(\\s*)|(\r)|(\n)|(\r\n)"))){
    if(strA.equals("") && inputStr.matches("(\\s*)|(\r)|(\n)|(\r\n)")){
    inputStr = (char)System.in.read()+"";
    continue;
    }
    strA += inputStr;
    inputStr = (char)System.in.read()+"";
    }
    if(strA.equals("") && !inputStr.matches("(\\s*)|(\r)|(\n)|(\r\n)")){
    if(i>=j){
    i--;
    }
    while(!inputStr.matches("\\d")){
    if(!inputStr.matches("(\\s*)|(\r)|(\n)|(\r\n)")){
    System.out.print("您输入的不是数字,请重新输入:");
    }
    inputStr = (char)System.in.read()+"";
    }
    isNextNum = false;
    }
    else{
    nums[i] = Integer.parseInt(strA);
    j++;
    isNextNum = true;
    }
    }
    max = min = nums[0];
    for (int i = 1; i < nums.length; i++) {
    if (nums[i] < min)
    min = nums[i];
    if (nums[i] > max)
    max = nums[i];
    }
    System.out.println("The max of your input is:" + max);
    System.out.println("The min of your input is:" + min);
    }
    }执行结果:
    请输入数组个数:5
    共需要输入5个数字,请输入第1个数字:a
    您输入的不是数字,请重新输入:1234
    共需要输入5个数字,请输入第2个数字:1234534
    共需要输入5个数字,请输入第3个数字:a
    您输入的不是数字,请重新输入:b
    您输入的不是数字,请重新输入:c
    您输入的不是数字,请重新输入:11
    共需要输入5个数字,请输入第4个数字:999999
    共需要输入5个数字,请输入第5个数字:1000000
    The max of your input is:1234534
    The min of your input is:11
      

  9.   

    楼主我教你怎么贴代码:
    1、将代码进行良好的格式化,以方便阅读。
    2、在发帖文本框的上方单击“#”按钮,选择 Java
    3、将代码粘贴到【code=Java】和【/code】之间。发出来的帖子就会是下面的效果:public class Hello {    // 程序入口
        public static void main(String[] args) {
            System.out.println("Hello!");
        }
    }
      

  10.   

    三楼的朋友,我是在dos下运行的,结果就是我说的那样
      

  11.   

    说道问题的渊源了。赞一个。
    楼主解决的方法:
    把System.in.read(); 
    替换
    Integer.parseInt(new BufferedReader(new InputStreamReader(System.in)).readLine());
    就可以了。