一、引用传递与数值传递
1 // PassArray.java 2 // Passing arrays and individual array elements to methods 3 4 public class PassArray { 5 6 public static void main(String[] args) { 7 int a[] = { 1, 2, 3, 4, 5 }; 8 String output = "The values of the original array are: "; 9 10 for (int i = 0; i < a.length; i++) 11 output += " " + a[i]; 12 13 output += " Effects of passing array " + "element call-by-value: " 14 + "a[3] before modifyElement: " + a[3]; 15 16 modifyElement(a[3]); 17 18 output += " a[3] after modifyElement: " + a[3]; 19 20 output += " Effects of passing entire array by reference"; 21 22 modifyArray(a); // array a passed call-by-reference 23 24 output += " The values of the modified array are: "; 25 26 for (int i = 0; i < a.length; i++) 27 output += " " + a[i]; 28 29 System.out.println(output); 30 } 31 public static void modifyArray(int b[]) { 32 for (int j = 0; j < b.length; j++) 33 b[j] *= 2; 34 } 35 public static void modifyElement(int e) { 36 e *= 2; 37 } 38 }
按引用传递与按值传送数组类型方法参数的最大关键在于: 使用前者时,如果方法中有代码更改了数组元素的值,实际上是直接修改了原始的数组元素。 使用后者则没有这个问题,方法体中修改的仅是原始数组元素的一个拷贝。
二、浮点数转化为人民币读法。比如将“¥123.52”转换为“壹佰贰拾叁元伍角贰分”。
1 //浮点数转化为人民币读法 2 //9999.99元以内 3 import java.util.*; 4 public class HanZi { 5 private static char rmbArr[]={'零' , '壹' , '贰' , '叁' , '肆' , '伍' , '陆' , '柒' , '捌' , '玖'}; 6 private static char danweiArr[]={'十' , '百' , '千'}; 7 private static char yjfArr[]={'圆','角','分'}; 8 @SuppressWarnings("resource") 9 public static void main(String[] args) { 10 Scanner in=new Scanner(System.in); 11 System.out.println("输入0-9999.99之间的小数(必须输入两位小数!):"); 12 String rmbInput=in.nextLine(); 13 char rmbOutput[]=new char[12]; 14 translate(rmbInput,rmbOutput); 15 System.out.println("人民币读数:"); 16 System.out.println(rmbOutput); 17 } 18 public static void translate(String x,char rmb[]){ 19 int i,j,k; 20 char qianArr[]=x.substring(0, x.indexOf('.')).toCharArray(); 21 char houArr[]=x.substring(x.indexOf('.')+1).toCharArray(); 22 int len=qianArr.length; 23 int qArr[]=new int[len]; 24 int hArr[]=new int[2]; 25 for(i=0;i<len;i++){ 26 qArr[i]=qianArr[i]-48; 27 } 28 for(i=0;i<2;i++){ 29 hArr[i]=houArr[i]-48; 30 } 31 for(i=-1,j=len-2,k=-1;j>=0;j--){ 32 rmb[++k]=rmbArr[qArr[++i]]; 33 rmb[++k]=danweiArr[j]; 34 if(j==0) 35 rmb[++k]=rmbArr[qArr[++i]]; 36 } 37 for(i=0;i<2;i++){ 38 rmb[++k]=yjfArr[i]; 39 rmb[++k]=rmbArr[hArr[i]]; 40 } 41 rmb[++k]=yjfArr[i]; 42 k++; 43 for(;k<12;k++){ 44 rmb[k]=' '; 45 } 46 } 47 }
三、随机生成十个整数并求和,消息框显示。
1 import javax.swing.JOptionPane; 2 public class RandomArraySum { 3 4 public static void main(String[] args) { 5 int []array=new int[10]; 6 int sum=0; 7 String output=""; 8 for(int i=0;i<10;i++){ 9 array[i]=(int)(Math.random()*100); 10 sum+=array[i]; 11 } 12 output+="随机生成的十个数是:"+" "; 13 for(int i=0;i<10;i++){ 14 output+=array[i]+" "; 15 } 16 output+=" "; 17 output+="十个数相加等于:"+" "+sum; 18 JOptionPane.showMessageDialog(null, output,"输出",JOptionPane.INFORMATION_MESSAGE); 19 } 20 21 }
四、大数相加
import java.util.*; public class BigInt { public static void main(String[] args) { int a[]=null,b[]=null,c[]=null; System.out.println("输入第一个正整数:"); a=input(a); System.out.println("输入第二个正整数:"); b=input(b); c=add(a,b); System.out.println("两数之和:"); output(c); } public static int[] input(int number[]){ @SuppressWarnings("resource") Scanner in=new Scanner(System.in); String i=in.nextLine(); char ip[]=i.toCharArray(); number=new int[ip.length]; for(int k=0;k<ip.length;k++){ number[k]=ip[k]-48; } return number; } public static int[] add(int x[],int y[]){ int push=0; //进位 int l[]=y.length>x.length?y:x; int min[]=y.length>x.length?x:y; int r[]=new int[l.length]; for(int i=l.length-1,j=min.length;i>=l.length-min.length;i--) r[i]=min[--j]; int result[]=new int[l.length+1]; int len=result.length; int left=l.length-1; int right=r.length-1; while(right>=0&&left>=0){ result[--len]=(l[left]+r[right]+push)%10; if(l[left]+r[right]+push>=10) {push=1;} else {push=0;} right--; left--; } if(push==1) result[--len]+=push; return result; } public static void output(int x[]){ String o=""; for(int i=0;i<x.length;i++){ if(i==0&&x[i]==0) continue; o+=x[i]; } System.out.print(o); } }