實驗來源: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
北京 永豐