#bilibilijava
-4 本地变量
定义在函数内部的变量都是本地变量
###7-1-5 块的含义
使用标号“OUT:” 在内层循环中添加break OUT,那么break的就是out的循环体,并不是内循环体。
println 按行输出
print 在同行输出
printf 使用浮点数输出
调试运行的时候:
step over 一步步来
step into 进入到函数中
step return
hanshu zhong
for(a=1;a<0;a++)
初始值;循环得以继续的条件;循环中所做的操作
优先级: !非 > &&与 > || 或
因为 优先级:!age>20 :这里面的!优先级大于“>”
double 浮点数 也就是小数
package bilibilijava;
import java.util.Scanner;
//f(n)=1+1/2+1/3+1/4+...
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
double sum = 0.0;
for (int i =1 ;i<=n;i++)
{
sum += 1.0/i;//浮点数所以要用小数点0.0,1.0
}
System.out.println(sum);
System.out.printf("%.2f",sum);
}
}
output
100
5.187377517639621
5.19
//f(n)=1-1/2+1/3-1/4+...
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
double sum = 0.0;
//int sign = 1; //可以使用 sign=-sign
for (int i =1 ;i<=n;i++)//i++是该循环每次循环会用的表达式
{
if (i%2==0)//偶数
sum -= 1.0/i;//浮点数所以要用小数点0.0,1.0
else
sum += 1.0/i;
}
System.out.println(sum);
System.out.printf("%.2f",sum);
}
}
方法1:for循环
//求最大公约数,输入ab两个数,求最大公约数
//输入: 12 18
//输出:6
//方法1
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int rns=1;//表达结果,也就是最大公约数
for(int i = 2; i<=a && i<=b;i++)//&&并且
if(a%i ==0 && b%i == 0)
rns=i;
System.out.println(a+"和"+b+"的最大公约数是"+rns);
}
}
方法2:辗转相除法
//方法2 欧几里德法和辗转相除法
//(1)如果b=0,计算结束,a就是最大公约数---可以用while
//(2)否则,计算a/b的余数,让a=b,b=r
//(3)回到第一步
//a b r(余数)
//12 18 12
//18 12 6
//12 6 0
//6 0 end
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int oa=a;//保留初始值数值
int ob=b;
System.out.println("a"+"---"+"b"+"---"+"r");
while(b!=0)
{
int r = a%b;
System.out.println(a+"---"+b+"---"+r);
a=b;
b=r;
}
System.out.println(oa+"和"+ob+"的最大公约数是"+ a);
}
}
数组就是容器,都是相同类型的,创建数组之后,没有办法在之后对大小进行改变。
<类型>[]<名字> = new <类型>[元素个数]
int[] grades = new int[100];
double[] averages = new double[20];
或以下方式
i=100
int[] grades = new int[i];
grades相当于数组的管理者
数组名字.length,一般写在for循环的第二分号中,这是有可扩展性的循环代码。
投票统计
写一个程序,输入数量不确定的【0,9】范围内的整数,统计每一种数字出现的次数,输入-1表示结束
//投票统计
//写一个程序,输入数量不确定的【0,9】范围内的整数,统计每一种数字出现的次数,输入-1表示结束
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int x;
int[] nums = new int[10];//创建数组,其中长度10,每个位置分别表示每个数字的个数,默认数组中每个元素是零
x = in.nextInt();
while(x!=-1)
{
if(x>=0&&x<=9)//判断x在有效范围内
nums[x]++;
x = in.nextInt();//再次读取
}
for(int i = 0;i
//数组-可扩展的代码
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] scores = {12,23,23,12,34,56,67,21};
System.out.println(scores.length);
for(int i=0;i
数组的管理者a,b。并不是数组的所有者,数组更新不受管理者影响
//数组-a b 同为数组的管理者,如果数组更新,那么遍历输出也更新,只是管理者不是所有者。
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] a={1,2,3,4,5};
int[] b = a;
for (int i=0;i
数组-ab同为管理者,但是如果数组中数值相同,并不是同一数组的管理者那么也为false
//数组-ab同为管理者,但是如果数组中数值相同,并不是同一数组的管理者那么也为false
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] a={1,2,3,4,5};
int[] b = a;
System.out.println("[b=a]:"+(a==b));//true
int[] b1 = {1,2,3,4,5};
System.out.println("[b1=a]:"+(a==b1));//false
}
}
//数组拷贝
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] a={1,2,3,4,5};
int[] b = new int[a.length];
for(int i=0;i
//数组判断里面的值是否相等,并不是管理者相等
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] a={1,2,3,4,5};
int[] b = {1,2,3,4,5} ;
boolean isEqu = true;
//判断两数组是否相等
for(int i=0;i
//寻找数组中某数的位置
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int x = in.nextInt();
int[] data={1,2,3,4,5,8,9,10};
int loc = -1;
for(int i=0;i-1)
{
System.out.print(x+"的位置是第"+(loc+1)+"个");
}
else
{
System.out.print("数组中没有"+x);
}
}
}
3
3的位置是第3个
比较适合该数组中有或没有这个数,而不是该数在哪个位置。
for(int k:data)
对于数组data中的每一个元素,循环每一轮,把它拿出来作为一个k
也就是第一轮k=data[0],第二轮k=data[1]
思路:首先先来一个50长度的空数组,然后将第一个数2放入进去,从3开始循环,运用索引指针从1开始,添加素数。
cnt表示这里面有多少个素数,也表示下一个应该写到哪里去
//寻找前50个素数--优化解法
//思路:首先先来一个50长度的空数组,然后将第一个数2放入进去,从3开始循环,运用索引指针从1开始,添加素数。
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int[] primes = new int[50];
primes[0]=2;
int cnt=1; //cnt表示这里面有多少个素数,也表示下一个应该写到哪里去
MAIN_LOP:
for(int x=3;cnt<50;x++)//从3往后找素数
{
for(int i=0;i
寻找100以内的素数–优化解法2
//思路:构造n以内的素数表
//(1)令x为2
//(2)将2x 3x 4x直到ax
//寻找100以内的素数--优化解法2
//思路:构造n以内的素数表
//(1)令x为2
//(2)将2x 3x 4x直到ax
int[][] a ={
{1,2,3,4},
{1,2,3},
};
//九宫格棋子 输赢
//规则: 三行 三列 三对角线 三反对角线 如果全是X(1)或者O(0),那么胜出
//九宫格棋子 输赢
//规则: 三行 三列 三对角线 三反对角线 如果全是X(1)或者O(0),那么胜出
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//定义表格size
final int SIZE=3;
int[][] board = new int[SIZE][SIZE];
boolean getResult = false;//默认是false
int numOfX=0;//X和O的个数
int numOfO=0;
//读入矩阵
for(int i=0;i
output:
input:
1
1
1
1
1
0
0
0
0
output:
1 1 1
1 1 0
0 0 0
X WIN
char 数字 字母 或者 汉字都可以
c=‘A’
如果c++,那么是‘B’
c=‘汉’
如果c++,那么是’汊’(这个是unicode的字符列表中汉的下一个字)
‘A’----65(int)
‘a’----97(int)
a’-‘A’=32
‘A’-‘B’=-1
‘a’-‘b’=-1
‘汉’-‘A’=27656
综上所述:
a>A
B>A
‘汉’>A
操作 | 含义 |
---|---|
\b | 回退一格 |
\t | 到下一个表格位 |
\n | 换行 |
\r | 回车 |
" | 双引号 |
’ | 单引号 |
\\ | 反斜杠本身 |
【反斜杠b】–回退一格
abc/bd—abd
abc/b—abc
并不是删除,而是下一个字符取代最后一个位置。
【反斜杠t】–制作表格按列输出
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("abc\t123\t356");
System.out.println("a\t23\t56");
}
}
output(对齐输出)
abc 123 356
a 23 56
【反斜杠n】–换行
【反斜杠r】–回车
基础类型 | 包裹类型 |
---|---|
boolean | Boolean |
char | Character |
int | Integer |
double | Double |
包裹类型-Character
表示方法:Character.isDigit(‘a’)—false
运用函数 | 判断这个字符是不是 |
---|---|
isDigit | 数字 |
isLetter | 字母 |
isLetterOrDigit | 字母或数字 |
isLowerCase | 小写字母 |
isUpperCase | 大写字母 |
isWhitespace | 一种空格 |
toLowerCase | 转换成小写 |
toUpperCase | 转换成大写 |
字符串表示要用双引号
可以用加号进行字符串连接,如果加号两边分别是str 和数字,那么也可以进行连接
“hello”+“world”—>“helloworld”
"I am "+18—>“I am 18”
1+2+“age”—>“3age”
“age”+1+2—>“age12”
运算符“+”从左向右进行,所以结果不同。
String s = new String("age");
int a = 1;
int b = 2;
System.out.println(s+a+b);//age12
System.out.println(a+b+s);//3age
(1)比较是否同一个东西,使用==
String s = in.next();//input:bye
System.out.println(s);
System.out.println(s=="bye");
output
bye
false
(2)比较内容是否相同,使用s.equals
String s = in.next();//input:bye
System.out.println(s);
System.out.println(s.equals("bye"));
output
bye
true
-(3)当两个变量管理同一个字符串,才说明这是两个相同的字符串,如果只是两个字符串的内容相同,不同的管理者之间是不同的,并不能称为相等。
运用函数s1 | 含义 |
---|---|
s1.compareTo(s2) | 比较两字符串大小,结果大于零表示s1大,小于零表示s2大,等于零表示两者相等 |
compareToIgnoreCase | 不区分大小写地来比较大小 |
length() | 获得String的长度 |
charAt(index) | 访问String里的字符 |
s.substring(n) | 得到从n位置到末尾的全部内容 |
s.substring(b,e) | 得到从b位置到e位置之前的内容 |
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s1 = "abc";
for(int i=0;i
output
a
b
c
注意字符串是不可以做for-each循环的
函数 | 含义 |
---|---|
s.substring(n) | 得到从n位置到末尾的全部内容 |
s.substring(b,e) | 得到从b位置到e位置之前的内容 |
String s1 = "abcde汉字";
System.out.println(s1.substring(2));//cde汉字(2,3,4)
System.out.println(s1.substring(0,2));//ab(0,1)
函数 | 含义 |
---|---|
s.indexOf© | 得到c字符所在的位置(index),-1表示不存在 |
s.indexOf(c,n) | 从n号位置开始寻找c字符 |
s.indexOf(t) | 找到字符串t所在的位置 |
从右边开始查找 | s.lastIndexOf© |
s.lastIndexOf(c,n) | |
s.lastIndexOf(t) |
使用方法,以及如何找到第二个4的位置:
String s1 = "0123X456345汉字";
System.out.println(s1.indexOf("X45"));//字符串要用双引号//4
System.out.println(s1.indexOf('4'));//5
//如果需要找到第二个4
int loc = s1.indexOf('4');//5
System.out.println(s1.indexOf('4',loc+1));//9
函数 | 含义 |
---|---|
s.startWith(t) | 检查是否是字符串开头的,可以有空格 |
s.endsWith(t) | 结尾的,可以有空格 |
s.trim | 删除字符串前后的空格 |
s.replace(c1,c2) | 替换,c2字符串取代c1 |
s.toLowerCase() | 全部小写 |
s.toUpperCase() | 全部大写 |
String s1 = " 0123X456345abc汉字 ";
System.out.println(s1.startsWith(s1));
//true,可以前面是空格
System.out.println(s1.endsWith(s1));
//true
System.out.println(s1.trim());
//删除空格0123X456345abc汉字
System.out.println(s1.replace('4','Z'));
// 0123XZ563Z5abc汉字
System.out.println(s1.toLowerCase());
// 0123x456345abc汉字
System.out.println(s1.toUpperCase());
// 0123X456345ABC汉字
System.out.println(s1);
//字符串本身不会被修改 0123X456345abc汉字
注意
所有的字符串都是不可变得,对他们的操作的结果都是制造出新的字符串出来
switch(s){
case"this":…break;
case"that":…break;
}
数学 | 含义 |
---|---|
abs绝对值 | abs(-12)—>12 |
pow幂次 | pow(2,3)—>8.0 |
random随机数 | random()—>一个0到1之间的随机数 |
round四舍五入 | 10.5—>11 |
//求和,求出1到10,20到30,35到45的三个和
public class Main {
public static void Sum(int a,int b)
{
int sum=0;
for(int i=a;i<=b;i++)
{
sum=sum+i;
}
System.out.println(a+"到"+b+"的和是"+sum);
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Sum(1,10);
Sum(20,30);
Sum(30,45);
使用关键字void,函数中不要用return。
范围由大到小: char–int–double
或者是使用强制转换。
注意 java语言在调用函数时,永远只能传值给函数。
( 参数)形参:函数中设置的参数
(值)实参:主函数中实际调用的参数
定义在函数内部的变量都是本地变量