【Java 小白菜入门笔记 1.3】流程控制、数组和输入输出
实验来源:https://www.shiyanlou.com/courses/1230
流程控制
if else ,switch, do-while, while
if(condition){
todo
}
else if(other condition){
todo
}
else{
todo
}
switch(value){
case v1:
todo
break;
case v2:
todo
break;
default:
todo
}
while(condition){
todo
}
do{
todo
}while(condition)
for循环,和C++的格式一样,举例;(计算1到1000的所有偶数之和)
public class SumOfEven{
public static void main(String[] args){
int sum = 0;
for (int i = 1; i <= 1000; i++){
if (0 == i % 2){
sum += i;
}
}
System.out.println("sum of 1-1000 : " + sum);
}
}
输出结果:
sum of 1-1000 : 250500
对输入字符去除空格实验:
import java.util.Scanner;
public class StringUtil{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String a = input.nextLine();
String prt = new String("");
for(int i = 0; i < a.length(); i++){
if(' ' != a.charAt(i)){
prt = prt + a.charAt(i);
}
}
System.out.println(prt);
}
}
输入输出结果:
shi ya n lou
shiyanlou
注意:
- for循环的i一定要先声明类型 int i = 0;
- String中取元素(char)应该用charAt(index)方法,而不是Python中的直接当数组来取值a[index]这种。
- String的拼接直接用加号即可。
字符串比较实验:
import java.util.Scanner;
public class ContrastString{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String str1 = input.nextLine();
String str2 = input.nextLine();
boolean is_same = true;
for(int i = 0; i < str1.length(); i++){
if(str1.charAt(i) != str2.charAt(i)){
is_same = false;
break;
}
}
if(is_same == true){
System.out.println("相同");
}
else{
System.out.println("不同");
}
}
}
输入输出:
abc3
abc3
相同
注意:
- 用Scanner生成一个从System.in获取数据的对象,然后用它的nextLine方法读入一行,存到String中。
- Java里的boolean类型的取值是true和false(小写),与python不同。
- 仍然是注意在使用变量前先声明类型。
打印星期几实验:
import java.util.Scanner;
public class PrintWeek{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int i = input.nextInt();
String WeekDay = new String("");
switch(i){
case 1:
WeekDay = "一";
break;
case 2:
WeekDay = "二";
break;
case 3:
WeekDay = "三";
break;
case 4:
WeekDay = "四";
break;
case 5:
WeekDay = "五";
break;
case 6:
WeekDay = "六";
break;
case 7:
WeekDay = "天";
break;
default:
WeekDay = " ";
}
System.out.println("今天是星期" + WeekDay);
return;
}
}
输入输出测试:
shiyanlou:project/ $ java PrintWeek [17:25:57]
1
今天是星期一
shiyanlou:project/ $ java PrintWeek [17:26:01]
7
今天是星期天
shiyanlou:project/ $ java PrintWeek [17:26:08]
8
今天是星期
数组
数组的定义方式
数据类型[ ] 数组名;
数据类型 数组名[ ];
数组名 = new 数据类型 [ 数组长度 ];
一些例子:
int [] int_array;
int int_array[];
int_array = new int[10];
String [] name;
int [] ages = {12, 18, 9, 33, 45, 60};
Java中对数组的遍历有一个foreach 的写法,即:
for(int age:ages){
todo sth.
}
有点类似于Python中 for i in arr 的语句。
注意:Java中的数组是用大括号引起来的,和Python中的中括号不同。Python的大括号是用来初始化集合(set)类型的。
二维数组的定义方式:
int [][] score = new int[2][3];
int [][] score;
score = new int[3][4];
int [][] score = {{1,2},{3,4}};
一个栗子,生成一个String为元素的数组,并且依次打印元素值。
public class ArrayTest{
public static void main(String[] args){
String [][] name = {{"zhao", "qian", "sun"},
{"li", "zhou", "wu"}};
for (int i = 0; i < name.length; i++){
for (int j = 0; j < name[0].length; j++){
System.out.println(name[i][j]);
}
}
return;
}
}
数组应用实验,求分数平均值
public class AverageScore{
public static void main(String args[]){
int [] score_list = {61,57,95,85,75,65,44,66,90,32};
int sum = 0;
for(int i = 0; i < score_list.length; i++){
sum = sum + score_list[i];
}
double avg = sum / score_list.length;
System.out.println("Average Score is " + avg);
return;
}
}
仍要注意类型的声明,以及return和main的返回值的对应关系。
对于数组,可以用中括号取元素,而String则需要用其自带的方法,即charAt。
对于array,用length(不带括号)获取数组长度。而String中的带括号。
(实际上说明array的length是一个属性,而String类的length是它的一个方法)
实验任务:从console每行输入一个字符串,保存到数组,直到遇到end,将所有除了end以为的之前的字符按顺序输出。
import java.util.Scanner;
public class InputTest{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String [] data = new String [100];
int cnt = 0;
while(cnt < 100){
String in_str = input.nextLine();
if(! in_str.equals("end")){
data[cnt] = in_str;
cnt += 1;
}
else{
break;
}
}
for(int j = 0; j < cnt; j++){
System.out.println(data[j]);
}
}
}
这里要注意的一点是:字符串String类型比较不用 == ,如果用了,返回的不是两个String 是否相同,而是两个String是否指向了同一个对象。应该用String类的自带方法 equals 来比较。
上面的写法不太优雅,因为用了while里面的判断。实际上可以直接用Scanner的 hasNext 方法来实现对于退出字符的判断。如下所示:
import java.util.Scanner;
public class InputTest{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String [] data = new String [100];
int cnt = 0;
while(!input.hasNext("end")){
data[cnt] = input.nextLine();
cnt += 1;
}
for(int j = 0; j < cnt; j++){
System.out.println(data[j]);
}
}
}
实验:给定数组输出最大最小值。
public class MaxAndMin{
public static void main(String args[]){
int [] data = {313, 89, 123, 323, 313, 15, 90, 56, 39};
int Max = data[0];
int Min = data[0];
for(int num:data){
if(num > Max){
Max = num;
}
if(num < Min){
Min = num;
}
}
System.out.println("Mininum is " + Min);
System.out.println("Maximum is " + Max);
}
}
注意:for-loop用 foreach 的形式时,也需要对冒号前的元素变量指定类型。
比如 for(int num:data)
2020年6月27日00:50:53
北京 永丰