Java小代码改正

liumingwei2009 2009-10-17 09:47:51
代码如下,注释写的很清楚了。
/**
* 这个类用来判断用户输入的三个数的最大值,最小值和中间值。
* @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方法好像没执行到一样的。大惑不解。。。。。。。。
...全文
178 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
laynepeng 2009-10-17
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 liumingwei2009 的回复:]
我真的是无法理解呀。这简直是匪夷所思,我还一直以为基础语法学的还可以的。因为我们班大多数语法根本不知道的。你介绍一下我应该看一下哪个方面的语法知识吧
[/Quote]

Java传parameter很难简单的说是值传递还是地址传递,例如传Array或对象就是地址传递了。
你仔细看一下这篇文章:
http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html

打基础的语法知识,最好的就是把:
http://java.sun.com/docs/books/tutorial/

认认真真看完~
umbrellall1 2009-10-17
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 liumingwei2009 的回复:]
好吧!我也基本上理解了也就是说它那个方法传入的是形参,实参还是没有变。
Java codepublicclass A {publicvoid f(int i) {
i++;
}
}class B {publicstaticvoid main(String[] args) {int j=4;
A ob=new A();
ob.f(j);
System.out.println(j);
}
}

它的输出是4吧!
我还是有点匪夷所思啊。这到底是为什么呢?
[/Quote]
你用的是实参不是形参

在定义个 int p=ob.f(j);

liumingwei2009 2009-10-17
  • 打赏
  • 举报
回复
我真的是无法理解呀。这简直是匪夷所思,我还一直以为基础语法学的还可以的。因为我们班大多数语法根本不知道的。你介绍一下我应该看一下哪个方面的语法知识吧
laynepeng 2009-10-17
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 liumingwei2009 的回复:]
好吧!我也基本上理解了也就是说它那个方法传入的是形参,实参还是没有变。
Java codepublicclass A {publicvoid f(int i) {
i++;
}
}class B {publicstaticvoid main(String[] args) {int j=4;
A ob=new A();
ob.f(j);
System.out.println(j);
}
}

它的输出是4吧!
我还是有点匪夷所思啊。这到底是为什么呢?
[/Quote]
你还是没理解。。。同样是值传递和引用传递的问题。你可以debug看看变化。或者你可以
i++;
后面加上
System.out.println(i);
看看,你会发现她会先变5然后变回4~
chaoshijiaren 2009-10-17
  • 打赏
  • 举报
回复
因为函数改变的事传进来的形参 你没有面向对象 改变的是参数的一个拷贝 因而return语句返回的是最初的值 而非改变后得知
liumingwei2009 2009-10-17
  • 打赏
  • 举报
回复
好吧!我也基本上理解了也就是说它那个方法传入的是形参,实参还是没有变。
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吧!
我还是有点匪夷所思啊。这到底是为什么呢?
laynepeng 2009-10-17
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 liumingwei2009 的回复:]
好吧 现在不说那个了。我真是无法理解它,为什么会那样,期待高手帮我一针见血的指出来。
我改成11#那样好不好啊?到底怎么改最好呢?
[/Quote]
3楼说的是原因;11#的是可以的;改成2#说的最好。他们已经全部帮你回答了。
umbrellall1 2009-10-17
  • 打赏
  • 举报
回复
小弟刚学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));
}
}
liumingwei2009 2009-10-17
  • 打赏
  • 举报
回复
好吧 现在不说那个了。我真是无法理解它,为什么会那样,期待高手帮我一针见血的指出来。
我改成11#那样好不好啊?到底怎么改最好呢?
liumingwei2009 2009-10-17
  • 打赏
  • 举报
回复
是啊 它穿进去的实际参数就应该是getMax中的形参了呀
lgm277531070 2009-10-17
  • 打赏
  • 举报
回复
我没说明白 反正我的意思和3楼的一样 i j k 的值没改变
warmlou 2009-10-17
  • 打赏
  • 举报
回复
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()只改变了传进去的形参
liumingwei2009 2009-10-17
  • 打赏
  • 举报
回复
我是新手 ,还没想到那么远
amdgaming 2009-10-17
  • 打赏
  • 举报
回复
你这样写 效率太底

如果 10000个 数 要比较 大小 还 不要累死你啊 定义 10000个 参数??

lgm277531070 2009-10-17
  • 打赏
  • 举报
回复
你自己有没有发现
System.out.println("其中最大的值为:" + ob.getMax(i,j,k));
getMax返回值是k 所以最终方法的结果怎么都是k 。你没在getMax()方法中处理k 没发现方法体里面的minToMax(i,j,k);方法是多余的么...


所以你参数k你设定为什么值就打印出什么值了
i ,j 参数也是一样的
liumingwei2009 2009-10-17
  • 打赏
  • 举报
回复
那个没问题的
liumingwei2009 2009-10-17
  • 打赏
  • 举报
回复
非要我这样干吗?这不符合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("输入的数据不合法!");
}

}
}


tanxiaoguoguo 2009-10-17
  • 打赏
  • 举报
回复
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;
}

}
这里有问题,你好像定义错了。
liumingwei2009 2009-10-17
  • 打赏
  • 举报
回复
难道非要我把minToMax里面的代码复制到下面的三个方法里吗?
tanxiaoguoguo 2009-10-17
  • 打赏
  • 举报
回复
先看看
加载更多回复(7)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧