java算法大礼包

1.读取数据

空白字符:空格、换行符(一般隐藏)、制表符(Tab)
in.nextInt() 他会忽略前导的空白字符,读取一个数字,直到遇到下一个空白字符。
in.next() 他会忽略前导的空白字符,读取一个字符串,直到遇到下一个空白字符。
in.nextLine() 他会读取下一行文本(空白字符也会被读取),直到读取到换行符(\n),换行符会被读掉,但不会包含在返回的String中。如果第一个读取的就是换行符,那就停止读取,只读到一个换行符。

1.1不停的读取数据同时处理

注意:hasNext()方法会阻塞式的检测有没有下一个数据,在他的内部会不停的循环检测

public boolean hasNext() {
        ensureOpen();
        saveState();
        modCount++;
        while (!sourceClosed) {     //数据源没有关闭就一直循环
            if (hasTokenInBuffer()) {    //直到缓存区中有数据才会返回,不然就会一直循环等待
                return revertState(true);
            }
            readInput();
        }
        boolean result = hasTokenInBuffer();
        return revertState(result);
    }
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		while (in.hasNext()) {
			int a = in.nextInt();
			int b = in.nextInt();
			int c = a + b;
			System.out.println(c);
		}
	}
}

1.2读取一行的数据

c语言网1003
注意:这里的in.nextLine() 会读取到换行符,所以一般在in.nextLine()之前先用一个in.nextLine()把换行符读掉,这里因为就一行数据,数据之前没有换行符,不需要吧换行符读掉。

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();     //这里返回的是String 
        for(int i = 0;i<s.length();i++){
            char ch = s.charAt(i);
            if(ch>='a' && ch<='u' || ch>='A' && ch<='U'){
                ch=(char)(ch+4);
            }
            if(ch>='w' && ch<='z' || ch >='W'&& ch<='Z'){
                ch = (char)(ch + 4 - 26);    //假设z后面的四个数是x1,x2,x3,x4 将x1,x2,x3,x4-26转为a,b,c,d
            }
            System.out.print(ch);
        }
    }
}

1.3谨慎使用整行读

acwing5050题
输入格式
第一行包含整数 T,表示共有 T组测试数据。

每组数据第一行包含整数 n。

第二行包含一个长度为 n的由小写字母构成的字符串。
输出格式
每组数据输出占一行,输出重新排序后的字符串
输入样例:
2
3
cba
3
acb
输出样例:
abc
abc

import java.util.Scanner;
import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int T = in.nextInt();
        for(int i=0;i<T;i++){
            int len=in.nextInt();
            in.nextLine();
            String s = in.nextLine();
            char[] c = s.toCharArray();
            Arrays.sort(c);
            System.out.println(c);
        }
    }
}

方法2,直接用in.next(); 忽略前导的空白字符。

public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int T = in.nextInt();
        for(int i=0;i<T;i++){
            int len=in.nextInt();
            String s = in.next();
            char[] c = s.toCharArray();
            Arrays.sort(c);
            System.out.println(c);
        }
    }

2.字符串相关处理

String相关

String s = new String("Hello,World")
String s = "Hello,World"   //String专属,不用构造器
String.charAt(i);         //获取String第i个位置的元素值

StringBuilder相关

StringBuilder sb = new StringBuilder();
StringBuilder sb = new StringBuilder("Hello");

StrBuilder sb = new StrBuilder();
 int i = 3;
 sb.append('a');    //添加元素
 sb.append('b');
 sb.append('c');
 sb.append('d');
 sb.charAt(3);       //查看某位置元素
 sb.setCharAt(3,'a');    //修改某位置元素

 System.out.println(sb);

3.JAVA答题通用框架

//导入类

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        //这里输入程序逻辑
}

	public static void hs2(){
	//函数2的逻辑。。。
	}
	public static void hs3(){
	//函数3的逻辑。。。
	}

4.# JAVA输出格式问题
右对齐输出数字

System.out.printf("%8d ",num);     //冒充c语言

读取案例

给定一个长度为 n
的由小写字母构成的字符串。

请你按照 a∼z
的顺序,对字符串内的字符进行重新排序,并输出重新排序后的字符串。

输入格式
第一行包含整数 T
,表示共有 T
组测试数据。

每组数据第一行包含整数 n

第二行包含一个长度为 n
的由小写字母构成的字符串。

输出格式
每组数据输出占一行,输出重新排序后的字符串。

数据范围
前 3
个测试点满足 1≤T≤5
,1≤n≤10

所有测试点满足 1≤T≤100
,1≤n≤200

输入样例:
2
3
cba
3
acb
输出样例:
abc
abc

排序

对java自带的类进行按规则排序

java中,Arrays.sort() 对基本数据类型数组只能从小到大排序
对对象数组才能按照规则排序。你想从小到大排序。
Acwing5372,原题让我从小到大,现在改成从大到小排序。

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        Integer[] a = new Integer[3];
        for(int i=0;i<3;i++) a[i]=in.nextInt();
        Arrays.sort(a,Collections.reverseOrder());
        for(int i=0;i<3;i++) System.out.print(a[i]+" ");
    }
}

这里我们不能对int[] a进行按规则排序,只能对Interger[] a进行按规则排序。

对自定义的类进行按规则排序

1.自定义一个排序规则。Arrays.sort()排序对象数组时,指定规则。
具体:实现Comparator接口,实现compare方法。

public class MyComparator implements Comparator<MyClass> {
    @Override
        public int compare(Object o1, Object o2) {
            Integer obj1 = (Integer)o1;
            Integer obj2 = (Integer)o2;
            return obj1.compareTo(obj2);
        }
}
List<MyClass> list = new ArrayList<>();
// 添加 MyClass 对象到 list 中

Collections.sort(list, new MyComparator());

方法2
自定义方法中实现Comparable方法,实现compareTo()方法。
然后直接Arrays.sort();

public class MyClass implements Comparable<MyClass> {
    private int value;

    // 构造函数、getter 和 setter 方法

    @Override
    public int compareTo(MyClass other) {
        // 定义比较规则,例如按照 value 字段升序排序
        return this.value - other.value;
    }
}
List<MyClass> list = new ArrayList<>();
// 添加 MyClass 对象到 list 中

Collections.sort(list);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值