写点什么

保姆级 Java 入门练习教程,附代码讲解,小白零基础入门必备,java 从入门到精通电子书百度云

作者:MySQL神话
  • 2021 年 11 月 28 日
  • 本文字数:4948 字

    阅读完需:约 16 分钟

}


代码实现




/**


  • https://www.nhooo.com/tool/java/

  • 在控制台打印"hello java"


*/


public class question_01 {


public static void main(String[] args) {


System.out.println("hello java");


}


}



总结




本篇文章带大家搭好环境,并体验了控制台打印。


下一题控制台输入,大家可以先思考一下??


加入组队刷题




02.键盘输入——三种方式


==========================================================================


题目描述




难度:简单


从键盘输入一个数字,打印出该数字的绝对值。


知识点




  • 键盘输入

  • 数学运算函数

  • 类型转换


解题思路



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()方法。


特别的,charint可以通过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()遇到空格停止接收。




03.短路与和逻辑与的区别——老实人和机灵鬼


===================================================================================


题目描述




难度:简单


/**


  • 短路与和逻辑与


*/


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


验证



总结




在实际开发中为了增强代码的可读性,统一使用短路与,且不在判断条件中做任何运算。




04.三数排序——两数交换高级算法


==============================================================================


题目描述




难度:简单


用 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




07.各数字的和——取余运算


===========================================================================


题目描述




难度:简单


计算给定整数 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);


}


}


输出结果



总结




熟练掌握取余和整除运算,大有作用。




08.素数和——break 和 continue


===================================================================================


题目描述




难度:简单


计算 500 以内的素数和。


知识点




  • 素数的定义

  • breakcontinue

  • 开方运算


解题思路



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()




09.数组中的最小值——一维数组


=============================================================================


题目描述




难度:简单


输出一维整型数组中的值最小的那个元素及其下标。


知识点




  • 一维数组

  • 排序


解题思路



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]);


}


}


输出结果



扩展总结




本节练习了一维数组的操作,下一节练习二维数组




10.各行元素之和——二维数组


============================================================================


题目描述

最后

即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个 Github 上全面的 Java 面试题大全,就是这份面试大全助我拿下大厂 Offer,月薪提至 30K!


我也是第一时间分享出来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!一共有 20 个知识点专题,分别是:

Dubbo 面试专题


JVM 面试专题



Java 并发面试专题



Kafka 面试专题



MongDB 面试专题



MyBatis 面试专题



MySQL 面试专题



Netty 面试专题



RabbitMQ 面试专题



Redis 面试专题



Spring Cloud 面试专题



SpringBoot 面试专题



zookeeper 面试专题



常见面试算法题汇总专题



计算机网络基础专题



设计模式专题



本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

用户头像

MySQL神话

关注

还未添加个人签名 2021.11.12 加入

还未添加个人简介

评论

发布
暂无评论
保姆级Java入门练习教程,附代码讲解,小白零基础入门必备,java从入门到精通电子书百度云