java_练习题

1.输入若干个单词,每个单词一行,均为小写字母,不会有空行,直到输入#结束(#为单独一行),
单词总数不超过1000;
要求统计共输入了多少不同的单词,每个单词出现了多少次;
按单词出现次数降序输出单词及其出现次数。

import java.util.Scanner;

public class E06 {

	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);

		String[] array = new String[1000];//定义的字符串数组
		
		System.out.println("请输入小于等于一千个单词(一行一个):");

		String x = in.nextLine();
		
		int[] num = new int[100];//记录重复次数的数组

		String string =  "#";

		int i = 0;

		  while(!string.equals(x)) {//当输入#时候结束输入
		  
		  array[i] = x;
		  
		  for(int j=0;j<=i;j++) {//遍历数组看是输入的和array内否存在相同的元素,若是有相同元素,num数组那个脚标位置的数字加1,并跳出循环避免再次遍历的时候重复记录
			  
			  if(array[j].equals(x)) {
				 
			  num[j]++;
			  
			  break;
		
			  }
				  
		  }
		  
		  x = in.nextLine();
		  
		  i++;
		  
		  }
		  
		     for(int e=0;e<num.length-1;e++) {//将两个数组按照num数组中的元素大小排序(从大到小)
		    	 
		    	 boolean first = false;//定义一个布尔类型在排序完成的时候,第一时间跳出循环
		    	 
		    	 for(int z=0;z<num.length-e-1;z++)//  O(n^2)
		    	 
		    		 if(num[z]<num[z+1]) {
		    			 
		    			 int temp= num[z+1];
		    			 
		    			 String aa= array[z+1];
		    			 
		    			 num[z+1]=num[z];
		    			 
		    			 array[z+1]=array[z];
		    			 
		    			 num[z]= temp;
		    			 
		    			 array[z]=aa;
		    			
		    			 first = true;
		    			 
		    		 }
		    	 
		    	 if(!first) {
		    		 
		    		 break;
		    		 
		    	 }
		     }
		  
		  for (int f = 0; f < i; f++) {
		 
		     if(num[f]!=0) {//因为两个数组定义的时候长度过大,打印的时候在没有放入元素的脚标会被打印为0和null
		     
		     System.out.println(" 单词为:"+array[f]+"     出现次数为:"+num[f]);// 打印数组
		
		     }
		
	    }
	
     }

}
//运行正常 2020/3/21

结果:
在这里插入图片描述
2.输入一整数n(n>=1),然后将随后输入的n个整数存入一整型数组;
显示该整型数组所有元素;
然后删除数组中多余的重复元素,重复数组元素中只保留第一个元素,
比如数组中存在3个整数5,下标分别为2,9和12,
则删掉下标为9和12的元素,后面元素顺次前移。
最后显示已删除多余的重复元素的整型数组所有元素。

import java.util.Arrays;  

import java.util.Scanner;

public class E05 {

	public static void main(String[] args) {

		Scanner in= new Scanner(System.in);
		
		System.out.println("请输入需要建立的数组长度(请多输入一位用于存放while的条件):");
		
		int z =in.nextInt();
		
		int [] numbers=new int[z];//定义一个数组
		
		System.out.println("请输入大于或等于1个需要的数组元素(用空格隔开):");
		
		int x = in.nextInt();
		
		int cnt = 0;
		
		while(x!=-1) {//输入-1时候终止输入
			
			numbers[cnt]=x;
			
			cnt++;
			
			x=in.nextInt();
			
		}
		
		System.out.println("原数组为:");
		
		for(int i=0;i<cnt;i++)
		
		System.out.printf("%d ",numbers[i]);//打印数组

		Arrays.parallelSort(numbers);//对数组进行从小到大的排序
		
		int e=0;
		
		int b=0;
		
		for(int j=1;j<numbers.length;j++) {
			
			if(numbers[j] != numbers[j-1]){//相邻的两个数作比较
				
				numbers[e++]=numbers[j];//如果不相同就依次重新存入数组
			 
				b++;//计数器为了后边的打印多余的不会出现0
				
			}
			
		 }
	
		System.out.println("\n删除重复的数之后的数组为:");
		
		for(int i=0;i<b;i++)
			
		System.out.printf("%d ",numbers[i]);//打印数组
	
	   }
		
	
}
// 正常运行 2020/3/21

结果:
在这里插入图片描述
3.输出以下回字图像
11111111111111111
12222222222222221
12333333333333321
12344444444444321
12345555555554321
12345666666654321
12345677777654321
12345678887654321
12345678987654321
12345678887654321
12345677777654321
12345666666654321
12345555555554321
12344444444444321
12333333333333321
12222222222222221
11111111111111111

public class E04 {

	public static void main(String[] args) {

		for(int i=1;i <= 17;++i){
			
			int ii =18-i;
			
			int iii = i < ii ? i:ii;
			
			for(int j = 1;j <= 17;++j)
			
			{
				
				int jj = 18-j;
				
				int jjj = j< jj? j:jj;
				
				System.out.printf("%d", iii<jjj ? iii:jjj);
				
			}
			
		   System.out.println();
		}
		
	}

}
//正常运行   2020/03/06

结果:
在这里插入图片描述
若是想要外围是大一层一层减小只需要把上边代码
iii<jjj ? iii:jjj 改成10-(iii<jjj ? iii:jjj)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值