保姆级 Java 入门练习教程,附代码讲解,小白零基础入门必备,java 从入门到精通电子书百度云
}
/**
https://www.nhooo.com/tool/java/
在控制台打印"hello java"
*/
public class question_01 {
public static void main(String[] args) {
System.out.println("hello java");
}
}
本篇文章带大家搭好环境,并体验了控制台打印。
下一题是控制台输入,大家可以先思考一下??
==========================================================================
难度:简单
从键盘输入一个数字,打印出该数字的绝对值。
键盘输入
数学运算函数
类型转换
1.键盘输入
和打印一样,相比于 python 的
input()
,Java 的输入也比较麻烦,但是作为初学者练习,属于必会内容。
下面一条会介绍三种输入的方法,小伙伴们要注意他们的区别。
System.in
该方法能获取从键盘输入的字符,但只能针对一个字符的获取,获取的只是char
类型的。如果想获得int
,float
等类型的输入,比较麻烦。具体见代码。
InputStreamReader
可以获取键盘输入的字符串,如果要获取的是int
,float
等类型的仍然需要转换
《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
。具体见代码。
Scanner
可以获取键盘输入的字符串,有现成的获取int
,float
等类型数据,非常方便,被广泛使用。具体见代码。
2.数学运算函数
Java 的
Math
类包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。
Math 的方法都被定义为
static
形式,通过Math
类可以在主函数中直接调用。
下面简单介绍几个常用的函数。具体见代码。
abs()
返回参数的绝对值。min()
返回两个参数中的最小值。max()
返回两个参数中的最大值。pow()
返回第一个参数的第二个参数次方。sqrt()
求参数的算术平方根。random()
返回一个随机数。Math.PI
圆周率
3.类型转换
Java 支持显示和隐式转换,在实际应用中要善于使用包装类的parseXXX()
和valueOf()
方法。
特别的,char
转int
可以通过ascii
的方式。例:
char ch = '9';
int i=ch-'0'
System.out.println(i);
三种方法实现。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
/**
从键盘输入一个数字,打印出该数字的绝对值。
*/
public class question_02 {
public static void main(String[] args) throws IOException {
question_02 question02 = new question_02();
question02.method1();
// question02.method2();
// question02.method3();
}
//System.in
public void method1() throws IOException {
System.out.println("Please Enter Data:");
char i = (char)System.in.read();
System.out.println("System.in --> "+Math.abs(i-'0'));
}
//InputStreamReader
public void method2() throws IOException {
System.out.println("Please Enter Data:");
//new 一个 InputStreamReader 对象
InputStreamReader is = new InputStreamReader(System.in);
//BufferedReader 的有参构造的方法
BufferedReader br = new BufferedReader(is);
//读取一行,抛出异常
String line = br.readLine();
System.out.println("InputStreamReader --> "+Math.abs(Integer.parseInt(line)));
}
//Scanner
public void method3(){
System.out.println("Please Enter Data:");
Scanner sc = new Scanner(System.in);
//读取 int
int i = sc.nextInt();
//String s = sc.nextLine(); 读取字符串型输入
//float f = sc.nextFloat(); 读取 float 型输入
System.out.println("Scanner --> "+Math.abs(i));
}
}
输出结果
思考:
sc.next()
和sc.nextLine()
有什么区别?
答:next()
遇到空格停止接收。
===================================================================================
难度:简单
/**
短路与和逻辑与
*/
public class question_03 {
public static void main(String[] args){
int i=5;
boolean e = i > 6 & i++ > 7;
System.out.println(e);
System.out.println(i);
e = i > 6 && i++ > 7;
System.out.println(e);
System.out.println(i);
}
}
请写出以上代码的输出
关系运算符
自增运算
逻辑与(&)和短路与(&&)在运算上对条件的结果判断不会产生影响,但会对条件本身的运算有影响。
逻辑与(&)在运算时会连续运算所有需要判断的命令.但短路与当遇到
false
时就停止运算。
分析
第一次判断是逻辑与,老实人不管对错,全部计算一下,则i++
被执行,输出e=false;i=6
;
第二次判断是短路与,机灵鬼先判断第一个是错的,就不再往下计算,i++
不被执行,输出e=false;i=6
;
验证
在实际开发中为了增强代码的可读性,统一使用短路与,且不在判断条件中做任何运算。
==============================================================================
难度:简单
用 if 语句实现 a、b、c 的值按从小到大排序
if
判断两数交换
1.if 判断
本题整理的思路就是比较 - > 交换。
if
作为一种分支结构,用来根据判断条件的不同做不同的后续处理。
2.两数交换
通常的做法,好比交换两个杯子的水,需要先找来一个空杯子,也就是一个临时变量存值。代码如下:
int t=a;
a=b;
b=t;
高级做法,不使用其他变量如何做?思考??一下,文末给出答案。
/**
用 if 语句实现 a、b、c 的值按从小到大排序
*/
public class question_04 {
public static void main(String args[]){
int a=9,b=5,c=7,t;
if(a>b) {
t=a; a=b; b=t;
}
if(a>c) {
t=a; a=c; c=t;
}
if(b>c) {
t=b; b=c; c=t;
}
System.out.println("a="+a+",b="+b+",c="+c);
}
}
输出结果
如何不用其他变量交换两个数的值?
答,将两个数做加/乘法。在做减/除法。代码如下:
a=a*b;
b=a/b; //等价于 a*b/b=a,即将 a 的值赋给了 b
a=a/b; //等价于 a*b/a=b,即将 b 的值赋给了 a
加减的方式留给大家去实现。
05.计算 5+ 55 + 555 + … 的前 10 项的和——for 循环
=================================================================================================
难度:简单
计算 5+ 55 + 555 + … 的前 10 项的和
for 循环
简单数学
1.for 循环
简单的for
循环的应用,确定好初始值,步长,终止值即可。
2.找规律
难点在如何确定加数,即找到加数之间的规律。
不难发现每一个加数是前一个加数的 10 倍+5。
??注意一点:最终的结果可能会超出int
的范围,需要使用long
。
/**
*计算 5+ 55 + 555 + ... 的前 10 项的和
*/
public class question_05 {
public static void main(String args[]){
//定义变量
long sum=0,a=5,item=a;
//初值 1,步长 1,终值 10
for(int i=1;i<=10;i++) {
//追加到总和
sum=sum+item;
//确定下一个加数
item=item*10+a;
}
System.out.println(sum);
}
}
输出结果
除了for
循环,用while
能否实现呢?什么时候用for
?什么时候用while
?
06.计算 1 + 1/2! + 1/3! + 1/4! + … + 1/20! 的值——初窥动态规划
================================================================================================================
难度:简单
计算 1 + 1/2! + 1/3! + 1/4! + … + 1/20! 的值。
循环结构
阶乘的计算
初窥动态规划
1.循环结构
观察算式的规律,从 1-20,每次加 1,循环 20 次。
2.阶乘的计算
n!
是为阶乘,等于1*2*3*4...(n-1)*n
3.初窥动态规划
动态规划,一直是算法中的难点,本次不做深度讲解,通俗的说一下。
就是把复杂问题简单化,比如 4 的阶乘可以看到 3 的阶乘再乘 4,而 3 的阶乘可以看做 2 的阶乘再乘 3,2 的阶乘等于 1 乘 2。
其实就是这样一个思想,可以看下 leetcode《爬楼梯》这道题。
/**
计算 1 + 1/2! + 1/3! + 1/4! + + 1/20! 的值
*/
public class question_06 {
public static void main(String args[]) {
double sum=0,a=1;
int i=1;
while(i<=20) {
sum=sum+a;
i=i+1;
//关键点,动态规划思想
a=a*(1.0/i);
}
System.out.println("sum="+sum);
}
}
输出结果
上一节的问题:什么时候用for
?什么时候用while
?
答:其实两者区别不大,大多数情况都可以解决问题。只需记住一点:循环次数未知时用 while。
===========================================================================
难度:简单
计算给定整数 12345 的各位上数字的和。
除法运算
取余运算
解题的关键在于如何拿到各个位上的数字。
举例:拿到 34 的个位和十位
int a=34;
//整除运算,拿到 3
int b=34/10;
//返回余数 4
int c=34%10;
/**
计算给定整数 12345 的各数字的和。
*/
public class question_07 {
public static void main(String args[]) {
int y = 12345;
int r = 0 ;
int sum = 0;
while(y!=0) {
r = y % 10;
sum += r;
y = y / 10;
}
System.out.println("y = " + sum);
}
}
输出结果
熟练掌握取余和整除运算,大有作用。
===================================================================================
难度:简单
计算 500 以内的素数和。
素数的定义
break
和continue
开方运算
1.素数的定义
大于 1 的自然数中,除了 1 和它本身以外不再有其他因数就叫做素数。
比如2=1×2;5=1×5;
所以 2、5 就是素数。但6=1×6=2×3
,即 6 除了 1 和自身 6 外还有其他因数 2 和 3,不是素数。
2.break 和 continue
break
:终止所有循环,直接跳出。
continue
:终止本次循环,继续执行下一次循环。
3.开方运算
Math.sqrt()
/**
求 500 以内的素数和
*/
public class question_08 {
public static void main(String[] args) {
int sum=0,i,j;
for(j=2;j<=500;j++) {
for( i=2;i<=j/2;i++) {
if(j%i==0)
break; //说明除去 1 和本身有其他除数,不是素数,也就没有继续循环的必要
}
if(i>j/2) { //i>j/2 说明,break 没有被执行到,即除去 1 和本身无其他除数,是素数
sum+=j;
}
}
System.out.println(sum);
}
}
输出结果
思考:如果是计算 500w 以内的素数和,如何提高效率呢?
回答:将j/2
改为Math.sqrt()
。
=============================================================================
难度:简单
输出一维整型数组中的值最小的那个元素及其下标。
一维数组
排序
1.什么是数组
所谓的数组指的就是一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作。
定义数组
int data[] = new int[3];
// 数组的长度为 3,超过会报下标越界异常,且下标从 0 开始
添加元素
data[0] = 10; // 第一个元素
data[1] = 20; // 第二个元素
data[2] = 30; // 第三个元素
循环打印
for(int x = 0; x < data.length; x++) {
System.out.println(data[x]); //通过循环控制索引
}
2.排序算法
其实严格来说我们并没有用到排序算法,但有一些思想在里面,想提前了解可以看这篇。
/**
输出一维整型数组中的值最小的那个元素及其下标。
*/
public class question_09 {
public static void main(String args[]) {
int a[] = { 12, 24, 6, 37, 3, 22, 64 };
int min = 0;
for (int i = 1; i < a.length; i++) {
if (a[min] > a[i]) {
min = i;
}
}
System.out.println("a[" + min + "] = " + a[min]);
}
}
输出结果
本节练习了一维数组的操作,下一节练习二维数组。
============================================================================
最后
即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个 Github 上全面的 Java 面试题大全,就是这份面试大全助我拿下大厂 Offer,月薪提至 30K!
我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!一共有 20 个知识点专题,分别是:
Dubbo 面试专题
JVM 面试专题
Java 并发面试专题
Kafka 面试专题
MongDB 面试专题
MyBatis 面试专题
MySQL 面试专题
Netty 面试专题
RabbitMQ 面试专题
Redis 面试专题
Spring Cloud 面试专题
SpringBoot 面试专题
zookeeper 面试专题
常见面试算法题汇总专题
计算机网络基础专题
设计模式专题
评论