蓝桥杯备战01

关于 算法题java的输入的一些问题

1.对于nextInt(),nextLine(),next(),nextString()的问题?

2.对于输入的不同需要如何去接收数据呢?

3.讨论一下动态数组ArrayList<

4.数据类型之间的一些转换

每次做算法题,输入时的数据保存让我头大,可能是做题少的原因,这里我就把我自己遇到的一些输入的问题罗列出来,方便之后回顾。

一、对于nextInt(),nextLine(),next()的问题?

nextInt();

该方法只会读取数值,对于后面的‘\n’(回车)还没有读取

nextLine();

该方法读取到回车'\r'结束

next();

该方法读取到空白符就结束;空白符: 空格,回车,tab;

三种方法还是有明显区别的;

二、算法题中如何接收数据

一般接收数据的两种方式

Scanner scanner =new Scanner(Syetem.in);

或者是

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

scanner方式

输入举例

1 3

2 4

5 6

7 6

对于这样的输入数据

for(int i=0;i<n;i++){
n=scanner.nextInt();//读取到数字便结束
m=scanner.nextInt();
}

输入举例

4 6

asd tase

asd asdr

asd asdt

asd asd

对于这样的输入数据

int n,t;
String[] ar=new String[4];
n=scanner.nextInt();
t=scanner.nextInt();
for(int i=0;i<4;i++){
ar[i]=scanner.nextLine();
}

输入举例

4 2 3 6 5 11 48 66 88 79 13 54 6 54 45

4 2 3 6 5 11 48 66 88 79 13 54 6 54 45

4 2 3 6 5 11 48 66 88 79 13 54 6 54 45

对于这样的数据

如果要使用nextInt(),也行,这里使用动态数组,算是多一种方法;

这时我们可以使用动态数组来完成。

ArrayList<ArrayList<Intager>> list=new ArrayList<>();  //定义了一个动态数组,数组里面的类型是Integer类型的动态数组
for(int i=0;i<3;i++){
String line=scanner.nextLine();
String[] split=line.split(" ");  //将读入的一行字符串通过空格进行分割,存入字符串数组中
ArrayList<Intager> li=new ArrayList<Intager>;  
for(int j=0;j<split.length;j++){
li.add(Intager.parseInt(split[j]));  //将字符串数组中的值,转换成为int型的数字,并且添加进动态数组中
}
line.add(li);   //将该动态数组添加进创建的动态数组中,其实也就形成了一个类似二维数组的东西
}

BufferReader方式

该类型的方式,我并不熟练;

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] strs = br.readLine().split(" ");
N = Integer.parseInt(strs[0]);
F = Integer.parseInt(strs[1]);

三、讨论一下动态数组ArrayList<>

ArrayList类是一个可以动态修改的数组,与普通数组的区别就是他没有固定大小的限制,可以增添和删除元素

创建一个动态数组list,里面存入的类型是Integar

ArrayList<Intager> list =new ArrayList<Inrager>;

数组内的类型一般是引用类型,所以需要基本类型的包装类

boolean

Boolean

byte

Byte

short

Short

int

Integer

long

Long

float

Float

double

Double

char

Character

可以使用的函数

list.add();向数组内添加数据

list.get(1); 获取数组1号位置的数

list.set(1,100); 设置数组1号位置的数为100;

list.remove(1); 删除1号位置的数,删除后,一号位置之后的位置全部向前移动。这也体现了数组是会动的

list.size(); 获取数组的长度,一般是用来遍历的

toArray() 方法将 Arraylist 对象转换为数组。

toString() 方法将Arraylist 对象转换为字符串。

下面是一些小问题

如果想要删除数组的奇数位置上的数该怎么办?

我们从头开始遍历,删除1号位置,这时想要删除的3号位置的数已经移动到了2号位置,想了半天,我也没想明白如何去删除,上网搜索,看到了需要倒着遍历就行了,我想了一下确实如此。从数组的最后一个开始遍历,删除i%2==1的数,然后i-=2;

如何对数组的排序?

升序排序

Collections.sort(lsit); 使用该方法进行排序

降序排序

Collections.reverseOrder(list);

反转数组

Collections.reverse(list);

这些都是对动态数组的排序

如何对普通数组进行排序呢?

升序

使用 Arrays.sort(数组名) 语法对数组进行排序,排序规则是从小到大,即升序。

Collections.reverseOrder() 方法

Arrays.sort(a, Collections.reverseOrder());进行降序 降序时,数组必须是包装类

ArrayList的扩容?

如果默认的话,其数组大小是10,当添加第11个数的时候,进行自动扩容,1.5倍,也就是15;

数组的扩容也就是将老数组的元素拷贝到新的数组中,这样代价是很高的,所以应该尽量避免让数组扩容

四、关于数据之间的一些转换

对于String[] ——> String

使用String.join("",String[]变量);

例子:

String[] arrayOfStrings = {"One", "Two", "Three", "four" , "Five"};

String arrayToString = String.join(" ", arrayOfStrings);

System.out.println(arrayToString);

对于String ——>String[]

使用

String str = "123abc";

String[] arr = str.split("");//split以什么方式进行分割

对于int——>String

第一种方式:String的valueOf方法, int i=1; String s=String.valueOf(i);

第二种方式,直接在int后面加一个空的字符串,因为在java里面,默认任务int类型和字符串类型相加,为字符串类型。 int i=2; String s=i+"";

第三种方式:使用int的封装类Integer,在Integer里面用他的toString方法。 int i=3; String s=Integer.toString(i); 一般很少使用

对于String——>int

Integer.parseInt(String)方法

Integer.valueOf(String)方法。

对于String——>char

从字符串中提取单一字符

使用String.charAt(index)(返回值为char)可以得到String中某一指定位置的char。

将字符串全部转换为字符数组

使用String.toCharArray()(返回值为char[])可以得到将包含整个String的char数组。这样我们就能够使用从0开始的位置索引来访问string中的任意位置的元素。

对于char——>String

String s = String.valueOf('c');

String s = String.valueOf(new char[]{'c'});

String s = Character.toString('c');

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

little小飞机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值