Java&PPT练习题3

1.编写方法实现五角数的计算(1,5,12,22,…,n(3n-1)/2)。显示前100个五角数

import java.util.*;
class Test{
	public static int getPentagonalNumber(int n){
		return n*(3*n-1)/2;
	}
	public static void main(String[] args){
		for(int i=0;i<100;i++){
			System.out.print(getPentagonalNumber(i)+" ");
		}
	}
}

在这里插入图片描述
华氏度与摄氏度转换


class ctf{
	public static double celToFah(double cel){
		return (9.0/5)*cel+32;
	}
	public static double fahToCel(double fah){
		return (5.0/9)*(fah-32);
	}
	public static void main(String[] args){
		System.out.println("cel\t\tFah");
		System.out.println("---------------------------------");
		for(int i=31;i<40;i++){
			System.out.println((double)i+ "\t\t"+celToFah(i));
		}
		//System.out.print();
		System.out.println("fah\t\tcel");
		System.out.println("---------------------------------");
		for(int i=30;i<=120;i++){
			System.out.println((double)i+"\t\t"+fahToCel(i));
		}
	}

}

在这里插入图片描述编写方法print,该方法有一个参数,若参数为字符串,输出每个字符,中间用空额隔开;若参数为int型整数,输出每个数字,中间用空格隔开。


import java.util.*;

public class Test3{ 
    public static void print(String s) { 
        for(int i=0;i<s.length();i++){
            System.out.print(s.charAt(i)+" ");   
        }
        System.out.println();
    }
    public static void print(int i) { 
        if(i!=0) {
            print(i/10);
            System.out.print(" "+i%10);
        }
    }
    public static void main(String args[]) { 
        print("abcdef");
        print(123456);
  
    }
}

随机产生100个0-100的随机数,并统计每个随机数出现的次数

import java.util.*;

public class Test { 
    public static void main(String[] args) {       
        int [] a=new int[10];
        for(int i=0;i<100;i++){
            a[(int)(Math.random()*10)]++;
        }
        for(int i=0;i<a.length;i++){
            System.out.println(i+":"+a[i]); 
        }
        System.out.println("Hello world!"); 
    }
}

用foreach语法实现遍历完成上题

public class foreach1{
    public static void main(String []args) {
		 int [] a=new int[10];
        for(int i=0;i<100;i++){
            a[(int)(Math.random()*10)]++;
        }
        /*for(int i=0;i<a.length;i++){
            System.out.println(i+":"+a[i]); 
        }*/
		//System.out.print();
		System.out.println("0 | 1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |  9 |  ");
		//System.out.println("1:  2:  3:  4:  5:  6:  7:  8:  9:  ");
		System.out.println();	
		for(int u:a){
				System.out.print(u+"   ");	
			}
    }

数组的复制操作arraycopy

做法:System.out.arraycopy(a1,0,a2,0,a2.length);
这里面分别是 数组a1 起始地址 a2 起始地址 需要复制的长度

import java.util.*;
public class test{
	public static void main(String[] args){
		int []a1,a2;
		a1=new int[10];
		a2=new int[5];
		for(int i=0;i<a1.length;i++){
        	a1[i]=(int)(Math.random()*10);
			System.out.print(a1[i]+" ");}
		System.out.println();
        for(int i=0;i<a2.length;i++){
        	a2[i]=(int)(Math.random()*10);
		System.out.print(a2[i]+" ");}
		System.out.println();
		System.arraycopy(a1,0,a2,0,a2.length);//前面赋值给后面的数组
		for(int u:a2){
			System.out.print(u+" ");
		}
	}
}

数组的另一个复制方法:全复制,即复制整一个数组clone()

缺点:只能复制整一个数组,不能进行单独操作。

public class test321ycf{
	public static void main(String args[]){
		int []a1={6,7,8,9};
		int []a2=a1.clone();
		for(int u:a2){
			System.out.print(u+" ");
		}
	}
}

数组作为方法的参数

public class testbyycf{
	public static void printArray(int []array){
		for(int i=0;i<array.length;i++){
			System.out.print(array[i]+" ");
		}
	}
	public static void main(String args[]){
		int []array={6,7,8,9};
		printArray(array);
	}
}

修改数组的元素

>>数值传递:对于基本数据类型,传递的是实参的值
>>对于数组类型参数,传递的是数组的引用,给方法传递的是这个引用。即传递共享信息方法的数组与传递的数组是一样的。

public class test321{
	public static void main(String args[]){
		int x=1;
		int []y=new int[10];
		y[0]=100;//这里已经很明显的告诉我们为什么我们能够修改数组的值。
		m(x,y);
		System.out.println("x is"+x);
		System.out.println("y[0] is"+y[0]);
	}
	public static void m(int k, int[] ns){
		k=100;
		ns[0]=5500;
	}
}
//一开始创建了y,y的赋值被定义为0;然后调用了m方法。m方法里面k被赋值为100;ns未赋值。
//后来y和ns都被赋值5500,这是因为它们都指向相同的数组;
///所以对应数组对应的程序栈上栈顶被赋值5500,也就是数组的初始值为5500;
//我们能够修改数组的值,但我们却不能修改x的值。

数组作为方法的返回

当从方法中返回数组时,是数组的引用被返回

public class 321{
	public static int []reserve(int []list){
		int []result =new int[list.length];
		for(int i=0,j=list.length-1;i<list.length;i++,j--){
			result[j]=list[i];
			System.out.print(result[j]+"  ");//此处还是引用,所以其实只是在遍历list数组,所以不能正确赋值。
		}
		System.out.println();
		for(int u:result){
			System.out.print(u+"  ");
		}
		return result;
	}
	public static void main(String args[]){
		int []list={6,7,8,9};
		reserve(list);
	}
}

用new创建的对象或数组,都不会因为方法的结果而消失,只会因为没有引用而消除


向main里面传递字符串参数

在运行Java时输入字符串参数。

import java.util.*;
class test321{
	public static void main(String args[]){
		Scanner input = new Scanner(System.in);	
		for(String u:args){
			System.out.print(u);
		}
	}
	
}

在这里插入图片描述


联系3数组扩容

编写方法,将数组容量扩大k,把原先数组元素复制到新的大的数组中然后返回新数组。

import java.util.*;
class tes321{
	public static int [] kuoron(int []a){
		Scanner input =new Scanner(System.in);
		int k= input.nextInt();
		int []b=new int[a.length+k];
		b=a.clone();
		for(int u:b){
			System.out.print(u+" ");
		}		
		return b;
	}
	public static void main(String args[]){
		int []a={1,2,3,4,5,6};
		kuoron(a);
	}	
}

联系4:将两个有序列表合并为一个有序列表

思路:一审:两个列表会不会有重复元素,其次就是比较大小,排序。
二理:因为在列表的比较中,会出现一个表的元素被比较完,而另一个表的元素还剩余的情况。所以要做比较判断。

import java.util.*;
public class merge{
	public static int []merge(int[]a,int []b){
		int []c=new int[a.length+b.length];
		int i,j,k;
		i=j=k=0;
		while(i<a.length && j<b.length){
			if(b[j]<a[i]){//细节:以b开始,因为b数组长度最短//
				c[k++]=b[j++];
			}else{
				c[k++]=a[i++];
			}
		}
		while(i<a.length){
			c[k++]=a[i++];}
		while(j<b.length){
			c[k++]=b[j++];}
		return c;
	}
	public static void main(String args[]){
		int []a={5,8,10,11,12,13,19};
		int []b={6,7,8,9};
		int []c=merge(a,b);
		for(int u:c){
			System.out.print(u+" ");
		}
	}	
}

思路二:用字符串特有排序连接,对于最后结果如果需要数值型,那根据之前的转换即可。

import java.util.*;
class hebing{
	public static String heBin(String s){
		
		char []a=new char[s.length()];
		for(int i=0;i<s.length();i++){
			a[i]=s.charAt(i);
		}
		String b="";
		Arrays.sort(a);
		for(int i=0;i<s.length();i++){
			b+=a[i];
		}
		return b;
	}
	public static void main(String[] args){
		Scanner input = new Scanner(System.in);
		System.out.println("The first list's long:");
		int n = input.nextInt();
		System.out.println("The Scond list's long:");
		int m = input.nextInt();
		String str = "";
  System. out. println("Print the String:");
		for(int i=0;i<n;i++){
			int number = input.nextInt();
			str+=number;
		}
		for(int i=0;i<m;i++){
			int number2 = input.nextInt();
			str+=number2;
		}
			String s=heBin(str);
  char []a =new char[s.length()];
  for(int i=0;i<s.length();i++){
        a[i]=s. charAt(i);
        System. out. print(a[i]+" ");}
	}
}

Arrays类:用于排序

多维数组

声明一个为int型的二维数组引用m
int[][]m;
m=new int[3][6];
一下为Arrays的一些操作,填充,升序排序,部分排序以及二分查找

import java.util.*;
class test{
	public static void main(String[] args){
		int []list={1,2,3,4,5,6};
		System.out.print(java.util.Arrays.toString(list));
		int []list1={3,4,7,10};
		int []list2={3,4,7,10,10};
		java.util.Arrays.fill(list1,5);//全部填充为5//
		java.util.Arrays.fill(list2,1,4,8);//除了下标为1和4的不变,其他填充为8//
		System.out.println();
		System.out.println(java.util.Arrays.toString(list1));
		System.out.print(java.util.Arrays.toString(list2));
		int []list3={5,5,5,5};
		System.out.println();
		System.out.print(java.util.Arrays.equals(list1,list3));//因为前面的操作中已经将list1的数组全部填为5了。
		//二分法查找
		int []lis4={3,4,5,6,7,8,9,66,77,99};//集合一定是先满足升序的//
		char []char5={'a','b','c','f','z'};
		System.out.println();
		System.out.println("Index is"+java.util.Arrays.binarySearch(list,3));
		System.out.println("Index is"+java.util.Arrays.binarySearch(list,12));
		System.out.println("Index is"+java.util.Arrays.binarySearch(char5,'a'));
		System.out.println("Index is"+java.util.Arrays.binarySearch(char5,'t'));
		//sort和parallelSort进行排序和部分排序//
		double []list6={6.0,9.0,8.0,6.0,7.0,0.0};
		int []list7={6,9,8,6,7,0};
		//java.util.Arrays.sort(list6,1,3);这里是排序从[1]到[3-1]之间的数//
		java.util.Arrays.parallelSort(list7,1,3);
		System.out.println(java.util.Arrays.toString(list7));//与sort一样也是可以部分排序以及升序排序//
		//System.out.print(java.util.Arrays.toString(list6));
	}
	
}

  • 实际上java中没有二维(多维)数组,只有一维数组,所谓二维数组就是一维数组的一维数组。
  • 二维数组的遍历
 `int [][]m;
...
	for(int i=0;i<m.length;i++)
		for(int i=0;i<m[i].length;i++)
			`
  • 二维数组初始化
int[] []m={{3,2},{3,9,1},{5}};
  • 都看第一维,第一维代表了几行,而第二维代表了有几列。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值