code

本文深入浅出地介绍了几种常见的算法实现案例,包括冒泡排序、正则表达式匹配、迷宫寻路算法、文件夹复制及取牌问题等,通过具体代码展示了算法的设计与应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



键盘键入:

Scanner s = new Scanner(System.in);
   int[] a = new int[10];
   System.out.println("请输入10个整数:");
   for(int i=0; i<10; i++) {
    a[i] = s.nextInt();
   }
   for(int i=0; i<10; i++) {
    for(int j=i+1; j<10; j++) {
     if(a[i] > a[j]) {
      int t = a[i];
      a[i] = a[j];
      a[j] = t;
     }
    }
   }

冒泡排序:

一、基本思路:

冒泡排序是一种简单的交换类排序。其基本思路是,从头开始扫描待排序的元素,在扫描过程中依次对相邻元素进行比较,将关键字值大的元素后移。每经过一趟排序后,关键字值最大的元素将移到末尾,此时记下该元素的位置,下一趟排序只需要比较到此位置为止,直到所有元素都已有序排列。

一般地,对n个元素进行冒泡排序,总共需要进行n-1趟。第1趟需要比较n-1次,第2趟需要比较n-2次,......第i趟需要比较n-i次。

二、算法实现

public class BubbleSort{

  public static void main(String args[]){

    int[] values={3,1,6,2,9,0,7,4,5};

    sort(values);

    for(int i=0;i<values.length;i++){//排序后打印数组中的元素

      System.out.println("Index: "+i+"  value: "+values[i]);

    }

  }

  public static void sort(int[] values){

    int temp;

    for(int i=0;i<values.length;i++){//趟数

      for(int j=0;j<values.length-i-1;j++){//比较次数

        if(values[j]>values[j+1]){

          temp=values[j];

          values[j]=values[j+1];

          values[j+1]=temp;

        }

      }

    }

  }

}


正则表达式,匹配问题

写一个正则表达式,可以匹配尾号5连的手机号。规则: 第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。
例如:18601088888、13912366666

代码:

import java.util.Scanner;
class Test91{
	public static void main(String [] args)
	{
		
		String regex="1[3458]\\d{4}(\\d)\\1{4}";
		
		Scanner sc=new Scanner(System.in);//接受键盘输入的电话号码。
		System.out.print("输入要检验的手机号码:");
		String arr =sc.nextLine();
		boolean b = arr.matches(regex);
		if(b==true){
			System.out.println("你输入的是符合要求的电话号码");
			
		}else{
			}
		System.out.println("你输入的是不符合要求的电话号码");
	}
}

老鼠走迷宫设计

*
 * 课题:老鼠走迷宫设计
 * 描述:老鼠走迷宫是循环求解的基本类型,在二维数组中用2表示迷宫的墙壁
 * 		使用1表示老鼠的行走路径,老鼠从迷宫的入口到出口的路径不可能就条
 * 要求:求出入口到出口的距离
 * 
 * */
public class Mouse {
	private int startl,startJ;	//入口
	private int endl,endJ;		//出口
	private boolean success = false;	//判断
//	public Mouse() {
//		// TODO 自动生成的构造函数存根
//	}
	
	public static void main(String[] args){
		int[][] maze ={
				{2,2,2,2,2,2,2},
				{2,0,2,2,0,0,2},
				{2,0,2,0,2,0,2},
				{2,0,0,0,0,2,2},
				{2,2,0,2,0,2,2},
				{2,0,0,2,0,0,2},
				{2,2,2,2,2,2,2},};
		System.out.print("显示迷宫 :\n");
		for (int i = 0;i < maze.length;i++){
			for (int j = 0;j < maze[i].length;j++)
			{
				if(maze[i][j] == 2)
				{
					System.out.print("2");
				}
				else
				{
					System.out.print("0");
				}
				
			}
			System.out.println();
		}
		
		Mouse mouse = new Mouse();
		mouse.setStart(1, 1);
		mouse.setEnd(5, 5);
		
		
		if(!mouse.go(maze))				//判断出口
		{
			System.out.println("没有找到出口"); 
		}else{
			System.out.println("出口找到");
		
		
		for(int i = 0;i <maze.length;i++)
		{
			for(int j = 0;j <maze[i].length;j++)
			{
				if(maze[i][j] == 2)
				{
					System.out.print("m");
				}
				else if(maze[i][j] == 0)
				{
					System.out.print("n");
				}else{
					System.out.print("");
				}
				
			}
			System.out.println();
		}
	 }}
	public void setStart(int i,int j){
		this.startl = i;
		this.startJ = j;
	}
	public void setEnd(int i, int j){
		this.endl = i;
		this.endJ = j;
	}
	public boolean go(int[][] maze){
		return visit(maze,startl,startJ);
	}
	
	
	private boolean visit(int[][] maze,int i,int j){
	//	maze[i][j] = 0;	
		if(i == endl && j == endJ) success = true;
		if(!success && maze[i][j+1] ==0)visit(maze, i, j+1);
		if(!success && maze[i+1][j] ==0)visit(maze, i+1, j);
		if(!success && maze[i][j-1] ==0)visit(maze, i, j-1);
		if(!success && maze[i-1][j] ==0)visit(maze, i-1, j);
		
		if(!success)maze[i][j] = 0;
		
		return success;
	}

}


文件夹即文件夹内容的复制

代码:

import java.io.*;
/**
 * 复制文件夹或文件夹
 */
public class CopyDirectory 
{
    // 源文件夹 
    static String url1 = "e:/KDR1";
    // 目标文件夹 
    static String url2 = "e:/newfile";
    public static void main(String args[]) throws IOException 
    {  // 创建目标文件夹 
        (new File(url2)).mkdirs();
        // 获取源文件夹当前下的文件或目录 
        File[] file = (new File(url1)).listFiles();
        for (int i = 0; i < file.length; i++) 
        {
            if (file[i].isFile()) 
            {// 复制文件 
                copyFile(file[i],new File(url2+file[i].getName()));
            }
            if (file[i].isDirectory()) 
            { // 复制目录 
                String sourceDir=url1+File.separator+file[i].getName();
                String targetDir=url2+File.separator+file[i].getName();
                copyDirectiory(sourceDir, targetDir);
            }
        }
    }
// 复制文件 
public static void copyFile(File sourceFile,File targetFile) throws IOException
{   // 新建文件输入流并对它进行缓冲 
        FileInputStream input = new FileInputStream(sourceFile);
        BufferedInputStream inBuff=new BufferedInputStream(input);

        // 新建文件输出流并对它进行缓冲 
        FileOutputStream output = new FileOutputStream(targetFile);
        BufferedOutputStream outBuff=new BufferedOutputStream(output);
        
        // 缓冲数组 
        byte[] b = new byte[1024 * 5];
        int len;
        while ((len =inBuff.read(b)) != -1)
        {
            outBuff.write(b, 0, len);
        }
        // 刷新此缓冲的输出流 
        outBuff.flush();
        
        //关闭流 
        inBuff.close();
        outBuff.close();
        output.close();
        input.close();
    }
    // 复制文件夹 
    public static void copyDirectiory(String sourceDir, String targetDir) throws IOException 
    {// 新建目标目录 
        (new File(targetDir)).mkdirs();
        // 获取源文件夹当前下的文件或目录 
        File[] file = (new File(sourceDir)).listFiles();
        for (int i = 0; i < file.length; i++) 
        {
            if (file[i].isFile()) 
            {
                // 源文件 
                File sourceFile=file[i];
                // 目标文件 
               File targetFile=new File(new File(targetDir).getAbsolutePath()+File.separator+file[i].getName());
               copyFile(sourceFile,targetFile);
            }
            if (file[i].isDirectory())
            {
                // 准备复制的源文件夹 
                String dir1=sourceDir + "/" + file[i].getName();
                // 准备复制的目标文件夹 
                String dir2=targetDir + "/"+ file[i].getName();
                copyDirectiory(dir1, dir2);
            }
        }
    }
}


取牌问题取4张牌 什么牌 和牌的类型


public class DeckOfCards {
//取牌问题
	public static void main(String[] args) {
		int[] deck = new int[52];
		String[] suits = {"Spades","Hearts","Diamonds","Clubs"};
		String[] ranks = {"Ace","2","3",
						"4","5","6",
						"7","8","9","10",
						"Jack","Queen","King"};
		for (int i = 0; i < deck.length; i++) {
			deck[i] = i;
		}
		
		for (int i = 0; i < deck.length; i++) {
			int index = (int)(Math.random() * deck.length);
			int temp = deck[i];
			deck[i] = deck[index];
			deck[index] = temp;
		}
		
		for (int i = 0; i < suits.length; i++) {
			String suit = suits[deck[i] / 13];
			String rank = ranks[deck[i] % 13];
			
			System.out.println("Card number数字号:" + deck[i] + "牌号:" + rank + "类型" + suit);
			
		}
	}

}

集合iterator过滤重复项

import java.util.*;
class TreeSetTest{
         public static void main(String[] args) {
                 TreeSet ts = new TreeSet(new StrLenComparator());
                 ts.add("a");
                 ts.add("ab");
                 ts.add("abc");
                 ts.add("bcdf");
                 ts.add("ab");
                 Iterator it = ts.iterator();
				 while(it.hasNext())  {
                         System.out.println(it.next());
                 }
         }
 }
 class StrLenComparator implements Comparator {
         public int compare(Object o1,Object o2)  {
                 String s1 = (String)o1;//在此处为什么将o1强转为字符串s1?
                String s2 = (String)o2;//同上所述......s2?
                 int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
                 if(num==0)
                         return s1.compareTo(s2);
                         return num;
         }
 }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值