代码如下,注释写的很清楚了。
/**
 * 这个类用来判断用户输入的三个数的最大值,最小值和中间值。
 * @author 刘明伟
 *
 */
import javax.swing.JOptionPane;public class Number {


/**
 * 方法minToMax将任意输入的三个数排序,输入参数i,j,k是要排序的数
 * @param i
 * @param j
 * @param k
 */
public void minToMax(int i,int j,int k) {
if (i > j ) {
//以下三行将i和j交换
i += j;
j = i - j;
i -= j;
}
if (i > k) {
i += k;
k = i -k;
i -= k;
}
if (j > k) {
j += k;
k = j - k;
j -= k;
}

}


/**
 * 方法getMin返回三个输入参数的最小数
 * @param i
 * @param j
 * @param k
 * @return
 */
public int getMin(int i,int j,int k) {
minToMax(i,j,k);
return i;
}

/**
 * 方法getMiddle返回三个输入参数的中间值
 * @param i
 * @param j
 * @param k
 * @return
 */
public int getMiddle(int i,int j,int k) {
minToMax(i,j,k);
return j;
}

/**
 * 方法getMax返回三个输入参数的最大值
 * @param i
 * @param j
 * @param k
 * @return
 */
public int getMax(int i,int j,int k) {
minToMax(i,j,k);
return k;
}


/**
 * main方法调用前面的方法完成程序的功能
 * @param args
 */
public static void main(String[] args) {
Number ob = new Number();
try {
String str1 = JOptionPane.showInputDialog("请输入第一个整数:");
int i = Integer.parseInt(str1);
String str2 = JOptionPane.showInputDialog("请输入第二个整数:");
int j = Integer.parseInt(str2);
String str3 = JOptionPane.showInputDialog("请输入第三个整数:");
int k = Integer.parseInt(str3);
System.out.println("所输入的三个数为:" + " " + i + "  " + j + "  " + k);
System.out.println("其中最大的值为:" + ob.getMax(i,j,k));
System.out.println("中间值为:" + ob.getMiddle(i,j,k));
System.out.println("最小值为:" + ob.getMin(i,j,k));
}
catch (NumberFormatException e) {
System.out.println("输入的数据不合法!");
}

}
}执行结果:
所输入的三个数为: 37  35  32
其中最大的值为:32
中间值为:35
最小值为:37
这是怎么回事啊??minToMax方法好像没执行到一样的。大惑不解。。

解决方案 »

  1.   

    我自己的感觉是main方法中有问题,是不是执行的时候把i,j,k的值又变动了
      

  2.   

    我感觉你写这个 没有什么 意思 你用 array。sort 一排序  
    大的 小的  中的 都 出来了
      

  3.   

    因为minToMax()是值传递,方法只改变了形参里的值,main方法调用minToMax后的顺序依然是 37,35,32
    把Int 改成Integer就行了
      

  4.   

    难道非要我把minToMax里面的代码复制到下面的三个方法里吗?
      

  5.   

    public void minToMax(int i,int j,int k) {
            if (i > j ) {
                //以下三行将i和j交换
                i += j;
                j = i - j;
                i -= j;
            }
            if (i > k) {
                i += k;
                k = i -k;
                i -= k;
            }
            if (j > k) {
                j += k;
                k = j - k;
                j -= k;
            }
        
        }
    这里有问题,你好像定义错了。
      

  6.   

    非要我这样干吗?这不符合java中代码重用的原则啊
    /**
     * 这个类用来判断用户输入的三个数的最大值,最小值和中间值。
     * @author 刘明伟
     *
     */
    import javax.swing.JOptionPane;public class Number {





    /**
     * 方法getMin返回三个输入参数的最小数
     * @param i
     * @param j
     * @param k
     * @return
     */
    public int getMin(int i,int j,int k) {
    if (i > j ) {
    //以下三行将i和j交换
    i += j;
    j = i - j;
    i -= j;
    }
    if (i > k) {
    i += k;
    k = i -k;
    i -= k;
    }
    if (j > k) {
    j += k;
    k = j - k;
    j -= k;
    }
    return i;
    }

    /**
     * 方法getMiddle返回三个输入参数的中间值
     * @param i
     * @param j
     * @param k
     * @return
     */
    public int getMiddle(int i,int j,int k) {
    if (i > j ) {
    //以下三行将i和j交换
    i += j;
    j = i - j;
    i -= j;
    }
    if (i > k) {
    i += k;
    k = i -k;
    i -= k;
    }
    if (j > k) {
    j += k;
    k = j - k;
    j -= k;
    }
    return j;
    }

    /**
     * 方法getMax返回三个输入参数的最大值
     * @param i
     * @param j
     * @param k
     * @return
     */
    public int getMax(int i,int j,int k) {
    if (i > j ) {
    //以下三行将i和j交换
    i += j;
    j = i - j;
    i -= j;
    }
    if (i > k) {
    i += k;
    k = i -k;
    i -= k;
    }
    if (j > k) {
    j += k;
    k = j - k;
    j -= k;
    }
    return k;
    }


    /**
     * main方法调用前面的方法完成程序的功能
     * @param args
     */
    public static void main(String[] args) {
    Number ob = new Number();
    try {
    String str1 = JOptionPane.showInputDialog("请输入第一个整数:");
    int i = Integer.parseInt(str1);
    String str2 = JOptionPane.showInputDialog("请输入第二个整数:");
    int j = Integer.parseInt(str2);
    String str3 = JOptionPane.showInputDialog("请输入第三个整数:");
    int k = Integer.parseInt(str3);
    System.out.println("所输入的三个数为:" + " " + i + "  " + j + "  " + k);
    System.out.println("其中最大的值为:" + ob.getMax(i,j,k));
    System.out.println("中间值为:" + ob.getMiddle(i,j,k));
    System.out.println("最小值为:" + ob.getMin(i,j,k));
    }
    catch (NumberFormatException e) {
    System.out.println("输入的数据不合法!");
    }

    }
    }
      

  7.   

    你自己有没有发现  
    System.out.println("其中最大的值为:" + ob.getMax(i,j,k));
    getMax返回值是k  所以最终方法的结果怎么都是k  。你没在getMax()方法中处理k 没发现方法体里面的minToMax(i,j,k);方法是多余的么...  
    所以你参数k你设定为什么值就打印出什么值了 
    i ,j 参数也是一样的 
      

  8.   

            public int getMax(int i,int j,int k) {
                minToMax(i,j,k);
                return k;
            }你这样return k 还是 getMax(int i,int j,int k)的k,minToMax()只改变了传进去的形参
      

  9.   

    我没说明白  反正我的意思和3楼的一样  i j k 的值没改变
      

  10.   

    是啊 它穿进去的实际参数就应该是getMax中的形参了呀
      

  11.   

    小弟刚学JAVA不久代码不是很好···
    public class Number {
                /**
             * 方法getMin返回三个输入参数的最小数
             * @param i
             * @param j
             * @param k
             * @return
             */
            public int getMin(int i,int j,int k) {
             int min=(i>j?(j>k?k:j):(i>k?k:i));
    return min;
            }
            
            /**
             * 方法getMiddle返回三个输入参数的中间值
             * @param i
             * @param j
             * @param k
             * @return
             */
       
            
            /**
             * 方法getMax返回三个输入参数的最大值
             * @param i
             * @param j
             * @param k
             * @return
             */
            public int getMax(int i,int j,int k) {
    int max=(i>j?(i>k?i:k):(j>k?j:k));


    return max;
            }
            
            /**
             * main方法调用前面的方法完成程序的功能
             * @param args
             */
            public int getMiddle(int i,int j,int k) {
             int middle = 0;
             int max=(i>j?(i>k?i:k):(j>k?j:k));
             int min=(i>j?(j>k?k:j):(i>k?k:i));
             if(i<max&&i>min){
             middle=i;
             }else if(j<max&&j>min){
             middle=j;
             }else if(k<max&&k>min){
             middle=k;
             }
    return middle;
            }
            public static void main(String[] args) {
                Number ob = new Number();
                String str1 = JOptionPane.showInputDialog("请输入第一个整数:");
                int i = Integer.parseInt(str1);
                String str2 = JOptionPane.showInputDialog("请输入第二个整数:");
                int j = Integer.parseInt(str2);
                String str3 = JOptionPane.showInputDialog("请输入第三个整数:");
                int k = Integer.parseInt(str3);
                System.out.println("所输入的三个数为:" + " " + i + "  " + j + "  " + k);
                System.out.println("其中最大的值为:" + ob.getMax(i,j,k));
                System.out.println("中间值为:" + ob.getMiddle(i,j,k));
                System.out.println("最小值为:" + ob.getMin(i,j,k));
            }
        }
      

  12.   

    好吧!我也基本上理解了也就是说它那个方法传入的是形参,实参还是没有变。
    public class A {
         public void f(int i) {
          i++;
         }
    }class B {
    public static void main(String[] args) {

    int j = 4;
    A ob = new A();
    ob.f(j);
    System.out.println(j);
    }
    }它的输出是4吧!
    我还是有点匪夷所思啊。这到底是为什么呢?
      

  13.   

    因为函数改变的事传进来的形参 你没有面向对象 改变的是参数的一个拷贝 因而return语句返回的是最初的值 而非改变后得知
      

  14.   

    你还是没理解同样是值传递和引用传递的问题。你可以debug看看变化。或者你可以
    i++;
    后面加上
    System.out.println(i);
    看看,你会发现她会先变5然后变回4~
      

  15.   

    你用的是实参不是形参在定义个  int p=ob.f(j); 
      

  16.   


    Java传parameter很难简单的说是值传递还是地址传递,例如传Array或对象就是地址传递了。
    你仔细看一下这篇文章:
    http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html打基础的语法知识,最好的就是把:
    http://java.sun.com/docs/books/tutorial/认认真真看完~