一、next、nextInt、nextLine区别
1.next()
next()不光是接收键盘输入的内容,而且还进行分割。例如默认分隔符为空格
java
Scanner sc = new Scanner(System.in);
while (true){
String str = sc.next();
System.out.println(str + "A");
}
// 输出结果
input:111 222 333
output:
111A
222A
333A
2.nextLine()
读取输入: 包括单词之间的空格和除回车以外的所有符号(即。它读到行尾)。读取输入后,nextLine()将光标定位在下一行。所以它和next()的区别就是它没有分隔符,直接扫描全部的键盘输入内容,并创建对象进行将其引用返回
java
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
System.out.println("str=" + str);
input:
111 222 333
output:
str=111 222 333
3.nextInt()
nextInt() 是取next() 然后把字符串解析成一个int数字。
它本质是调用了next()方法,然后将next()方法返回的字符串再解析成int型数字返回。
java
// nextInt用法示例:
while (true){
int n = sc.nextInt();
System.out.println("n= " + n + '0');
}
input :
111 222 333
output:
n= 1110
n= 2220
n= 3330
二、算法
题目:
游游拿到了一个 01 矩阵,她每次操作可以选择一个1*2(1行2列,不能2行1列)的区域,将所有字符都变成1。游游想知道,将所有字符都变成1需要最少操作多少次?
输入描述:
第一行输入n,m 表示矩阵的行和列
接下来的n行,每行输入一个长度为m 的0/1,代表矩阵的值
输出描述:
一个整数,代表游游的最小操作次数
代码:
java
import java.util.Scanner;
public class MeiTuan {
/*
* 游游拿到了一个 0-1 矩阵,
* 她每次操作可以选择一个1*2(1行2列,不能2行1列)的区域,将所有字符都变成1。
* 游游想知道,将所有字符都变成1需要最少操作多少次?
* */
public static void main(String[] args) {
// 处理输入 第一行输入n,m 表示矩阵的行和列
// 接下来的n行,每行输入一个长度为m 的0/1,代表矩阵的值
Scanner sc = new Scanner(System.in);
// 读取n和m
System.out.println("请输入矩阵的行和列");
int n = sc.nextInt();
int m = sc.nextInt();
sc.nextLine(); // 读取并丢弃行尾剩余部分
// 初始化矩阵
int[][] matrix = new int[n][m];
// 向矩阵中输入内容
for (int i = 0; i < n; i++) {
// 读取一行内容
String line = sc.nextLine();
for (int j = 0; j < m; j++) {
matrix[i][j] = line.charAt(j) - '0'; // 将line中的内容存入数组中并转为整数
}
}
// 调用最少操作次数函数
System.out.println(minOperations(matrix));
}
public static int minOperations(int[][] matrix){
// 得到矩阵的行和列
int n = matrix.length;
int m = matrix[0].length;
// 初始化最小操作数
int operations = 0;
// 遍历二维数组
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
// 判断数组中当前值是否为0
if(matrix[i][j] == 0){
// 若其右侧单元格还是0,一起转换
if(matrix[i][j+1] == 0 && j < m){
operations++;
j++; // 跳过下一个单元格
}else {
// 若其右侧单元格不是0,那么只增加操作数的值
operations++;
}
}
}
}
return operations;
}
}