ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1.重载方法 上一篇文章用到的max方法只能用于int型数据类型,但是如果需要决定两个浮

2021-01-22 23:55:51  阅读:107  来源: 互联网

标签:int max 数据类型 System swap println 方法 public


假如我们需要分别求出从1到10,从20到30,从35到45的整数和,我们需要分别列出3个循环求和,不过这3个循环,除了开始的数和结尾的数不同之外,其他都是非常类似的,我们下面通过调用方法来一次性编写,程序清单如下:

      public ststic int sum(int  i1, int i2){

          int sum=0;

          for(int i=i1,i<=i2;i++)

              sum=sum+i;

          return sume;

}

      public ststic void main(String args[]){

          System.out.println("Sum from 1 to 10 is "+sum(1,10));

          System.out.println("Sum from 20 to 30 is "+sum(20,30));

          System.out.println("Sum from 35 to 45 is "+sum(35,45));

}

      我们首先定义一个名为sum的方法,该方法带有两个参数i1和i2,main方法中的语句调用sum(1,10)计算从一到十的整数和,以此类推。

      方法是为完成一个操作而组合在一起的语句组,在前面的文章中,我们已经使用过预定义的方法,例如:System.out.println、JOptionPane,showMessageDialog、JOptionPane.showInputDialog、Integer.parseInt、Double.parseDouble、Math.pow和Math.ranodm等等,这些方法都在java库中定义,在本片文章里,我们将学会如何定义自己的方法以及应用方法抽象来解决复杂问题。

      1.定义方法

      定义方法的语法如下:

      修饰符    返回值类型    方法名(参数列表){

      方法体;

}

      就上面的例子而言,public static为修饰符,int 为返回值类型,sum为方法名,int i1,int i2为参数列表,方法体为下面的循环以及求和,return sum为返回值,方法可以不包含参数,例如Math.random()就没有参数。

      方法体中包含一个定义方法做什么的语句集合,例如max方法的方法体使用一个if语句来判断哪个数比较大,然后返回该数的值,为使带返回值的方法能返回一个结果,必须要使用关键字return的返回语句,执行return语句就意味着方法停止。注意,在方法头中,需要对每一个参数进行独立的数据类型声明,例如:max(int n1, int n2)是正确的,而max(int n1, n2)是错误的。

       2.调用方法

       创建方法时,定义方法要做什么,为了使用方法,必须调用它,根据方法是否有返回值,调用方法有两种途径。如果方法返回一个值,那么对方法的调用就当作一个值来处理,例如: int larger=max(3,4);如果方法返回void,对方法的调用必须时一条语句,例如println返回void:System.out.println("welcome to java");每当调用一个方法时,系统都会将参数,局部变量存储在一个称为堆栈的内存区域中,它用后进先出的方式存储数据,当一个方法调用另一个方法时,调用者的堆栈空间保持不动,新开辟的空间处理新方法的调用,一个方法结束返回到调用者时,其相应的空间也被释放。

      3.参数的值传递

       方法的威力在于它处理参数的能力,当调用带参数的方法时,实参的值传递给形参,这个过程称为通过值船体,如果实参时变量而不是直接量,则将该变量的值传递给形参,无论形参在方法中是否改变,该变量都不受影响,我们下面写出一个演示值传递效果的程序。

       程序创建了一个能实现两个变量互换的swap方法,调用swap方法时传递两个实参,调用方法后,这两个实参并未改变,程序清单如下:

package testpassbyvalue;

/**
 *
 * @author mjd
 */
public class TestPassByValue {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        int num1 =1;
        int num2 =2;
        System.out.println("Before invoking the swap method,num1 is"+num1+"num2 is"+num2);
        swap(num1,num2);
        System.out.println("After invoking the swap method,num1 is"+num1+"num2 is"+num2); 
    }
    public static void swap(int n1,int n2){
        System.out.println("\tInside the swap method");
        System.out.println("\t\tBefore swapping n1 is"+n1+"n2 is"+n2);
        int temp=n1;
         n1=n2;
         n2=temp;
        System.out.println("\t\tAfer swapping n1 is"+n1+"n2 is"+n2);
    }
}

图片

      在这个方法中,因为最后返回的是语句,所以使用的是public static void swap(int n1,int n2),而不是public static void int(int n1,int n2),这是本篇文章之前就提到过的。在调用swap方法前,num1为,num2为2,在调用方法后没有变化,它们的值没有因为调用swap方法而交换,那是因为实参num1和num2的值传递给n1和n2,但是n1和n2有自己独立于num1和num2的存储空间,所以,n1和n2的改变不影响num1和num2的内容。另一个转变是把swap中形参的名称改为num1,这样做也没有效果,因为当方法返回到调用者后就消失了,java只有值传递(没有引用传递),所以其实调用swap()时是把值赋给a、b,赋完后与c、d就没什么关系,c、d还是原来的值,其实就是值传递。

      如果一定要用方法swap交换,用数组改写后就可以实现交换功能了:

public class Swap5
{
    public static void main(String[] args)
    {
        int[] i = {3, 5};

        swap(i);
        System.out.println(i[0]);
        System.out.println(i[1]);
    }

    public static void swap(int[] a)
    {
        int temp = a[0];
        a[0] = a[1];
        a[1] = temp;
    }
}

      从这里我们可以看出,只有用类型才可以交换。因为原生数据类型是直接赋值,而引用类型直接赋的是地址,地址指向的是同一个对象,所以能改变。

      4.问题:将十进制数转换为十六进制数

      计算机系统的程序设计经常会用到十六进制数,本篇文章介绍将十进制数转换为十六进制数的程序,首先我们要弄清算法,十六进制数就是16的0次幂乘h1+16的1次幂乘h2加到16的n次幂乘hn,这些数可以通过不断用十进制数除以16直到商为0结束,依次得到的余数是hn,....h1,h0。举个例子,比如十进制数123,123除以16商为7,余数为11,11就是h0,即为十六进制中的B,商7继续除以16,余数为7,商为0,结束,所以十六进制的123就是7B,程序清单如下:

package decimal2hexconversion;

import java.util.Scanner;

/**
 *
 * @author mjd
 */
public class Decimal2HexConversion {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Scanner input =new Scanner(System.in);
        System.out.print("Enter a decimal number:");
        int decimal = input.nextInt();
        System.out.println("The hex number for decimal"+decimal+"is"+decimalToHex(decimal));
    }
    public static String decimalToHex(int decimal){
        String hex = "";
        while(decimal!=0){
            int hexValue = decimal%16;
            decimal = decimal/16;
            hex = toHexChar(hexValue)+hex;
        }
        return hex;
    }
    public static char toHexChar(int hexValue){
        if(hexValue<=9&&hexValue>=0)
            return(char)(hexValue+'0');
        else
            return(char)(hexValue-10+'A');
    } 
    
}

图片

     程序正确运行,构建成功,如果要将十六进制转换为十进制,就按照上卖弄的公式,例如7B,B先转换为11,11*16的0次幂,加上7*16的1次幂,倒推即可,同理,二进制,八进制都是一样的。

      下一篇文章我们会讲述方法中的剩余部分和数组,希望我们大家共同学习,一起进步,谢谢。


标签:int,max,数据类型,System,swap,println,方法,public
来源: https://blog.51cto.com/15064656/2602775

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有