java generateNum用法_JAVA基础知识总结(1)

1. Linux 操作系统

1) 开源免费的操作系统,主要作为服务器操作系统,而Java主要是服务器端的开发,所以部署的环境是Linux。

2) Linux与Windows结构的区别

(1) 文件系统不同:Linux是目录,Windows是盘符

(2) 外部设备映射不同:Linux是挂载点,Windows是盘符

(3) 安全级别不同:Linux安全级别高,Windows安全级别相对较低

3) Linux常用命令

(1) pwd——显示当前工作目录;

(2) ls——查看当前工作目录;

(3) Cd——改变当前工作目录

相对路径:相对于当前目录的位置;绝对路径:相对于根目录的位置

2. Java的开发环境

1)Java的编译运行过程

Java的开发环境分为编译期和运行期。在编译期,.Java源文件经过编译,生成.class字节码文件;在运行期,JVM虚拟机加载.class字节码文件并运行.class文件;Java的编译特性,让Java具有跨平台、一次编译、到处使用的特点。

2)解释JVM、JRE和JDK的区别

jvm:是Java的虚拟机,其主要作用是加载.class并运行.class文件;jre:是Java的运行环境,除了jvm以外还包含运行Java程序所必须的环境;jdk:是Java的开发工具包,除了jre外还包含开发Java程序所必须的命令工具。所以,JRE=JVE+java开发系统类库;JDK=JRE+编译、运行等命令工具。

3)配置环境变量JAVA_HOME:指向jdk的安装路径

CLASSPATH:表示类的搜索路径,一般简写为.

PATH:指向jdk下的bin目录

4)Java的注释

1)单行注释:// 2)多行注释:/* */ 3)文档注释:/** */

3.Java中的变量

1)变量:是存数的,指代的是它所存的那个数

2)变量的声明:int a; //声明一个整型变量,名为a; int b,c,d; //声明三个整型的变量,名为b,c,d

3)变量的命名规则

(1)只能包含字母、数字、_和$符,并且不能以数字开头

(2)严格区分大小写

(3)不能使用关键字

(4)可以中文命名,但不建议建议"英文的见名知意","驼峰命名法"

4)变量初始化的两种方式

(1)声明的同时初始化。例如:int a=20;//声明一个整型变量,赋值为20;

(2)先声明后初始化。例如:int a; a=5;//先声明整型变量a,在给变量a赋值为5

5)变量的使用

对变量的使用,就是对它所存的那个数的使用,其在使用的时候必须注意两点:

第一,变量的使用必须和数据类型相匹配;第二,变量在使用之前必须先声明并初始化

4. 基本数据类型

Java中基本数据类型有8个,常用的有5个:

1)int:整型,4个字节,范围是:-21个多亿到21个多亿。在Java中,整数直接量默认为int型,但不能超出范围,超范围则编译错误;两个整数相除,结果还是整数,小数位无条件舍弃;整数运算时超出范围,则发生溢出,溢出是需要避免的

2)long:长整型,8个字节,很大。长整型直接量需在数字后加L或l;运算时或有可能发生溢出,建议在第1个数字后加L。System.currentTimeMillis();用于获取自 1970.1.1零时到此时此刻的毫秒数

3)double:浮点型,8个字节,很大。浮点数直接量默认为double型,表示float需在数字后加F或f;double型数据参与运算时,有可能会出现舍入误差。

4)boolean:布尔型,1个字节。只能取值为true和false

5)char:字符型,2个字节。采用Unicode编码格式,一个字符对应一个码(0到65535);表现形式的是char字符,但实质上存储的是int码;ASCII码('a'--97 'A'--65 '0'--48);字符必须放在单引号中;特殊字符需通过\来转义

5.基本数据类型的转换

类型从小到大依次为:byte-short-int-long-float-double;

char-int-long-float-double;

1)数据类型装换的两种方式:自动类型转换:小类型到大类型

强制类型转换:大类型到小类型。其在转换的时候,可能会发生溢出或精度损失

语法:(要转换成为的数据类型)变量

2)数据类型装换的两点规则整数直接量可以直接赋值给byte,short,char,但不能超范围

byte,short,char型数据参与运算时, 先一律转换为int再运算

6. Scanner的用法

import java.util.Scanner;

Scanner scan = new Scanner(System.in);

System.out.println("请输入年龄:");

int age = scan.nextInt();7.java中的运算符和分支结构

1)运算符算术运算符:+-*/%,++,--

关系运算符:>,=,<=,==,!= (Boolean型)

逻辑运算符:&&,||,! (Boolean型)

赋值运算符:=,+=,-=,*=,/=,%=

字符串连接运算符:+

三目/条件运算符:boolean?数1:数2 对于条件表达式,先计算条件boolean,然后进行判断。如果b的值为true,计算数1的值,输出结果为数1的值;否则,计算数2的值,运算结果数2的值。三目运算可以进行嵌套。列如:

public static void main(String[] args){

int a=10;

int b=20;

System.out.println("此三元运算式结果是:"+((a>b)?'A':'B'));

}//B

2)分支结构

(1)if结构:满足条件时执行语句,不满足则不执行(1条路)

语法:

if(条件表达式){

语句块;

}

//判断一个数,是不是偶数

public class Test {

public static void main(String[] args){

int a = 4;

if(a%2==0){

System.out.println(a+"是偶数");

}

System.out.println("over");

}

}

(2)if...else结构:满足条件执行语句,不满足则执行另外的语句(两条路)

语法:

if(条件表达式){

语句块1;

}else{

语句块2;

}

//判断一个数是不是偶数,输出

public class Test {

public static void main(String[] args){

int a = 4;

if(a%2==0){

System.out.println(a+"是偶数");

}else{

System.out.println(a+"不是偶数");

}

System.out.println("over");

}

}

(3)if...else if结构:多个条件,满足不同条件执行不同语句(多条路)

语法:

if(条件表达式1){

语句块1;

}else if(条件表达式2){

语句块2;

}else if(条件表达式3){

语句块3;

}

//判断一个数正数、负数或是0并输出结果

public class Test {

public static void main(String[] args){

int a = 4;

if(a>0){

System.out.println(a+"是正数");

}else if(a<0){

System.out.println(a+"是负数");

}else if(a==0){

System.out.println(a+"是0");

}

System.out.println("over");

}

}

(4)switch...case结构:多条路

一种特殊的分支结构,只能用于判断整数,可以根据一个整数表达式的不同值,从不同程序入口开始执行,需要和break配合使用,执行完相应的语句后则退出switch块,不执行下面的语句。如果不加break,则会在满足条件后,将该条件下面的其他条件的语句块一起按顺序输出,直到遇到break或}停止,如下案例2。default选项可以不写,也不是必须放在后一个(建议放最后),默认匹配完所有条件后不匹配的情况下才会执行default语句,default可以不写break,如下:

语法:

switch(判断整数){

case 1:

语句块1;

break;

case 2:

语句块2;

break;

case 3:

语句块3;

break;

default:

语句块4;

break;

}

//

public class Test {

public static void main(String[] args){

int a = 4;

switch(a){

case 1:

System.out.println("A");

break;

case 2:

System.out.println("B");

break;

case 3:

System.out.println("C");

break;

default:

System.out.println("D");

break;

}

}

}

/*

运行结果:D

*/

//不加break的情况

public class Test {

public static void main(String[] args){

int a = 2;

switch(a){

case 1:

System.out.println("A");

break;

case 2:

System.out.println("B");

case 3:

System.out.println("C");

default:

System.out.println("D");

}

}

}

/*

运行结果:

B

C

D

*/

//default不写在最后,default需要加break,如下情况

public class Test {

public static void main(String[] args){

int a = 4;

switch(a){

default:

System.out.println("D");

case 1:

System.out.println("A");

break;

case 2:

System.out.println("B");

break;

case 3:

System.out.println("C");

break;

}

}

}

/*

运行结果:

D

A

*/

优点:常常和break语句配合使用实现分支的功能;与if...else的主要区别在于switch-case结构的效率高、结构更清晰;从JDK7.0开始,switch-case支持字符串表达式,

缺点:只能判断整数(字符串)相等

8.循环

1)循环:循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。

2)循环语句的组成

初始化语句:一条或者多条语句,这些语句完成一些初始化操作。

判断条件语句:这是一个boolean 表达式,这个表达式能决定是否执行循环体。

循环体语句:这个部分是循环体语句,也就是我们要多次做的事情。

控制条件语句:这个部分在一次循环体结束后,下一次循环判断条件执行前执行。通过用于控制循环条件中的变量,使得循环在合适的时候结束

3)循环结构

(1)for:应用率最高,固定次数循环

语法:for(初始化语句;判断条件语句;控制条件语句) {

循环体语句;

}

1.求出1-100之间偶数和

/*

需求:

A:求1-100之和。

B:求出1-100之间偶数和

*/

class ForTest1 {

public static void main(String[] args) {

//求1-100之和。

int sum1 = 0;

for(int x=1; x<=100; x++) {

sum1 +=x;

}

System.out.println("1-100之和是:"+sum1);

System.out.println("------------------");

//求出1-100之间偶数和

//方式1

int sum2 = 0;

for(int x=1; x<=100; x++) {

if(x%2 == 0) {

sum2 += x;

}

}

System.out.println("1-100偶数之和是:"+sum2);

System.out.println("------------------");

//方式2

int sum3 = 0;

for(int x=0; x<=100; x+=2) {

sum3 += x;

}

System.out.println("1-100偶数之和是:"+sum3);

System.out.println("------------------");

}

}

2.求5的阶乘

/*

需求:求5的阶乘。

什么是阶乘呢?

n! = n*(n-1)! 规则

n! = n*(n-1)*(n-2)*...*3*2*1

求和思想。

求阶乘思想。

*/

class ForTest2 {

public static void main(String[] args) {

//定义最终结果变量

int jc = 1;

//这里的x其实可以直接从2开始

//for(int x=1; x<=5; x++)

for(int x=2; x<=5; x++) {

jc *=x;

}

System.out.println("1-5的阶乘是:"+jc);

}

}

(2)while:先判断后执行,有可能一次都不执行

语法:

初始化语句;

while(判断条件语句) {

循环体语句;

控制条件语句;

}

例如:我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?

/*

我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。

请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?

分析:

A:定义一个统计变量,默认值是0

B:最高山峰是珠穆朗玛峰:8848m这是最终的厚度

我现在有一张足够大的纸张,厚度为:0.01m这是初始厚度

C:我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?

折叠一次有什么变化呢?就是厚度是以前的2倍。

D:只要每次变化的厚度没有超过珠穆朗玛峰的高度,就折叠,统计变量++

E:输出统计变量。

*/

class WhileTest01 {

public static void main(String[] args) {

//定义一个统计变量,默认值是0

int count = 0;

//最高山峰是珠穆朗玛峰:8848m这是最终的厚度

//我现在有一张足够大的纸张,厚度为:0.01m这是初始厚度

//为了简单,我把0.01变成1,同理8848就变成了884800

int end = 884800;

int start = 1;

while(start

//只要每次变化的厚度没有超过珠穆朗玛峰的高度,就折叠,统计变量++

count++;

//折叠一次有什么变化呢?就是厚度是以前的2倍。

start *= 2;

System.out.println("第"+count+"次厚度是"+start);

}

//输出统计变量。

System.out.println("要叠"+count+"次");

}

}

(3)do...while:先执行后判断,至少执行一次 要素1与要素3相同时,首选do...while

语法:

初始化语句;

do {

循环体语句;

控制条件语句;

} while((判断条件语句);

写程序优先考虑for循环,再考虑while循环,最后考虑do…while循环

break 跳出单层循环continue 跳出一次循环,进入下一次的执行;return 返回

9. 循环的嵌套

要点:循环中套循环,一般多行多列时使用,外层控制行,内存控制列

执行规则:外层循环走一次,内层循环走所有次

建议:嵌套的层数越少越好,能一层就不用两层,能两层就不用三层 若业务必须要通过三层以上的循环才能解决,说明设计有问题

break只能跳出一层循环

案例代码:

请输出一个4行5列的星星(*)图案:

/*

需求:请输出下列的形状

*

**

***

****

*****

提示:外循环控制行数,内循环控制列数

*/

class ForForTest01 {

public static void main(String[] args) {

//通过简单的观察,我们看到这是一个行是5,列数是变化的形状

//我们先打印出一个5行5列的形状

for(int x=0; x<5; x++) {

for(int y=0; y<=x; y++) {

System.out.print("*");

}

System.out.println();

}

}

在控制台输出九九乘法表:

注意:

'\x' x表示任意,这种做法叫转移字符。

'\t' 一个制表符的位置(tabtab键)

'\r' 回车

'\n' 换行

*/

class ForForTest02 {

public static void main(String[] args) {

for(int x=1; x<=9; x++) {

for(int y=1; y<=x; y++) {

System.out.print(y+"*"+x+"="+y*x+"\t");

}

System.out.println();

}

}

10.程序=算法+数据结构

1)算法,解决问题的流程/步骤(任何程序我们都可以用顺序、分支、循环三种结构实现);

2)数据结构,将数据按照某种特定的结构来保存,即数怎么存。设计良好的/合理的数据结构会导致好的算法。

11.数组

1)相同数据类型元素的集合

2)数组是一种数据类型(引用类型)

3)数组的定义:

int[] arr = new int[10];

4)数组的初始化:

//2.数组的初始化

int[] arr1 = new int[4]; //0,0,0,0

int[] arr2 = {1,4,7,9}; //1,4,7,9

int[] arr3 = new int[]{1,4,7,9}; //1,4,7,9

int[] arr4;

//arr4 = {1,4,7,9}; //编译错误,此方式只能声明同时初始化

arr4 = new int[]{1,4,7,9}; //正确

5)数组的访问:

(1)通过(数组名.length)来获取数组的长度

//3.数组的访问:

int[] arr = new int[3];

System.out.println(arr.length); //3

arr[0] = 100; //给arr中的第1个元素赋值为100

arr[1] = 200;

arr[2] = 300;

//arr[3] = 400; //数组下标越界异常

System.out.println(arr[arr.length-1]); //300

(2)通过下标/索引来访问数组中的元素

//下标从0开始,最大到(数组名.length-1)

int[] arr = new int[3];

arr[0] = 100; //给arr中第1个元素赋值为100

arr[1] = 200;

arr[2] = 300;

arr[3] = 400; //数组下标越界异常

System.out.println(arr[arr.length-1]); //输出最后一个元素的值

6)数组的遍历

//4.数组的遍历:

int[] arr = new int[10];

for(int i=0;i

arr[i] = (int)(Math.random()*100);

}

for(int i=0;i

System.out.println(arr[i]);

}

7)数组的复制

1、System.arraycopy()方法:

例如: System.arraycopy(a,1,a1,0,4);

2、Arrays.copyOf()方法

int[] a1 = Arrays.copyOf(a,6);

a = Arrays.copyOf(a,a.length+1); //扩容

8)数组的排序

(1)Arrays.sort(arr); //升序 Arrays类中的sort()使用的是“经过调优的快速排序法”; 比如int[],double[],char[]等基数据类型的数组,Arrays类之只是提供了默认的升序排列,没有提供相应的降序排列方法。

(2)冒泡排序算法:( 四个数冒三轮;每一轮都是从第1个元素开始冒; 每一次都是和它的下一个元素比;冒出来的就不带它玩了)

基本思想:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

//冒泡排序算法

public class BubbleSort {

public static void main(String[] args) {

/*

* 要求:

* 1)声明整型数组arr,包含10个元素

* 遍历数组,给每个元素赋值为0到99的随机数

* 遍历数组,输出每个元素的值

* 2)冒泡方式对arr进行排序----升序

* 3)输出arr排序后的结果

*/

int[] arr = new int[10];

for(int i=0;i

arr[i] = (int)(Math.random()*100);

System.out.println(arr[i]);

}

for(int i=0;i

for(int j=0;j

if(arr[j]>arr[j+1]){ //每次都和它下一个元素比

int t = arr[j];

arr[j] = arr[j+1];

arr[j+1] = t;

}

}

}

System.out.println("排序后:");

for(int i=0;i

System.out.println(arr[i]);

}

}

}

12.方法

1)方法: 1)封装一段特定的业务逻辑功能 2)方法尽可能的独立,一个方法只干一件事 3)方法可以被反复调用多次 4)减少代码的重复,有利于代码的维护,有利于团队的协作

2)方法的定义:

修饰词 返回值类型 方法名(参数列表){

方法体

}

(1)当方法需要结果时设计返回值的类型(2) 当不需要结果时候,设计反回自的类型为void (3)返回结果通过通过return关键字

3)方法的调用

(1)无返回值: 方法名(有参传参);

(2)有返回值: 数据类型 变量 = 方法名(有参传参);

4)return的用法:(1)return 值; //1.1)结束方法的执行 1.2)返回结果给调用方 (2)return; //2.1)结束方法的执行(只能用在无返回值的方法中)

//**方法的演示

//1.有参有返回值

public static double plus(double num1,double num2){

double num = num1+num2;

return num; //返回的是num中的那个数

//return num1+num2; //返回num1与num2的和

}

//2.无参有返回值

public static int getNum(){

//return; //编译错误,return后必须跟一个值

//return 8.88; //编译错误,return的值必须与返回值类型匹配

return 88; //1)结束方法的执行 2)返回一个值给调用方

}

//3.有参无返回值

public static void sayHi(String name){

System.out.println("大家好,我叫"+name);

if(boolean){

return; //1)结束方法的执行

}

}

//4.无参无返回值

public static void say(){

System.out.println("大家好,我叫WKJ");

}

}

//**猜字符小游戏

import java.util.Scanner;

//猜字符小游戏

public class Guessing {

//主方法

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);

char[] chs = generate(); //获取随机字符数组

System.out.println(chs);

int count = 0; //猜错的次数

while(true){ //自造死循环

System.out.println("猜吧!");

String str = scan.next().toUpperCase(); //获取用户输入的字符串,并转换为大写字母

if(str.equals("EXIT")){

System.out.println("下次再来吧!");

break;

}

char[] input = str.toCharArray(); //将字符串转换为字符数组

int[] result = check(chs,input); //对比随机字符数组与用户输入的字符数组

if(result[0]==chs.length){ //猜对了

int score = 100*chs.length-10*count; //1个字符100分,猜错一次扣10分

System.out.println("恭喜你,猜对了!,得分为:"+score);

break;

}else{ //猜错了

count++; //猜错次数增1

System.out.println("字符对个数为:"+result[1]+",位置对个数为:"+result[0]);

}

}

}

//生成随机字符数组

public static char[] generate(){

char[] chs = new char[5]; //随机字符数组

char[] letters = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',

'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',

'W', 'X', 'Y', 'Z' }; //随机字符范围数组

boolean[] flags = new boolean[letters.length]; //开关数组(与letters相对应)

for(int i=0;i

int index;

do{

index = (int)(Math.random()*letters.length); //随机下标(0到25)

}while(flags[index]==true); //当下标index对应的开关为true时,表示已存过,则重新生成下标index

//当下标index对应的开关为false时,表示未存过,则字符可存,循环结束

chs[i] = letters[index]; //基于下标index到letters中获取字符,并赋值给chs中的每一个元素

flags[index] = true; //将下标index对应的开关修改为true,表示已存过

}

return chs;

}

//对比:随机字符数组与用户输入的字符数组

public static int[] check(char[] chs,char[] input){

int[] result = new int[2]; //对比的结果,假设result[1]为字符对个数,result[0]为位置对个数

for(int i=0;i

for(int j=0;j

if(chs[i]==input[j]){ //字符对

result[1]++; //字符对个数增1

if(i==j){ //位置对

result[0]++; //位置对个数增1

}

break; //剩余input元素不再参与比较了

}

}

}

return result;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值