Java:每个人都能学会
java介绍
java是一门面向对象的编程语言,是由sun公司在九十年代初设计而成。因为它有着可跨平台性、垃圾回收制等特点,从而深受人们喜爱。现在已成为一门主流的编程语言。在开始编写java程序前,首先需要安装JDK(开发工具包),因为在JDK里包含由编译器、解释器、JVM虚拟机、jre(运行环境)以及成千上万的类库。安装好后需要环境(合理的环境),因为windows不知道,所以在电脑属性里环境变量里需要配置安装JDK的路径名。 OK,现在我们可以在记事本下简单的编写一段代码。由于记事本没有提示功能,所以可以下载专用的Java编辑器。如Eclipse(免费)、IDEA。 Java的单位是类,类里有方法、功能执行语句语句。相信大家都知道程序是指令与数据的集合。那么数据就需要变量来存储,也方便使用。但是由于数据类型不一样,所以在java里类型分为1.基本数据类型(int、short、float、doble、long、boolean、char、byte); 2. 数据引用类型,如String字符串类型 引用类型 那么指令呢?它是我们要计算机进行运算得出我们想要的结果。所以Java里包括很多运算符。有 1. 算术运算符(+ (加)、 -(减)、 (乘)、 /(除)、 %(取余))
2.比较运算符 > < >= <= == !=
3.逻辑运算符 || && ! | &
4.赋值运算符 = += -= = /= %=
5.三目运算符 (条件表达式)? (表达式):(表达式);
如果我们想要它输出显示结果,就用System.out.println()语句*。每个语句写完后一定要加上英文的分号。因为这是强制规定,否则就是语法错误,在一个主类里,需要有一个主方法 : public static void main(String[] args){ 方法体 } 。 这是程序的入口,同时也在这个方法里结束。现在我们来写一个有趣的代码。 比如自动关机,可以随意设置时间,怎么样,够酷吧!那我们现在来开始写代码.
代码部分
`
import java.io.IOException; public class Demo1 { /** * 自动关机 * @throws IOException * * */ public static void main(String[] args) throws IOException { //程序入口处 Runtime.getRuntime().exec("shutdown -s -t 300"); //300秒也就是5分钟后自动关机 } }
让我们运行一下
##现在我们让它取消自动关机:
代码如下:
public static void main(String[] args) throws IOException { Runtime.getRuntime().exec("shutdown -a"); }
怎么样?是不是很简单,很有趣吧!那么现在就开始进入我们学习Java的旅程吧。
Java基础
我们已经了解到了变量和运算符,那么现在我们了解下关于Java代码的流程控制。关于这方面有三个结构,有顺序结构、这个很容易理解对吧,就是从程序入口开始一句一句由上到下去执行。然后就是选择结构,它也可以叫分支结构,就是有些语句我们是需要根据条件去执行的,在这个结构我们可以用到if语句、switch语句、if–else语句。
if–else格式如下:
if(b) { //b是boole类型变量 可以用作条件判断 System.out.println("a的值是回文数,它的值为:"+a); }else { //如果b不满足为false(假)那就执行else里的语句块 System.out.println("a的值不是回文数,它的值为:"+a); }
if格式如下:
if(nums[i]!=value) { //这个只有if,是判段nums数组是否与value值不相等 ,如果是则执行if语句块 否则跳过if语句往下执行 nums[j] = nums[i]; ++j; }
switch格式如下:
switch (1) { // case 1: 语句1; case 2: 语句2; }
可以看出这些都是用来判断的,条件成立则执行,条件不成立则不执行,或者执行else语句块。而switch语句是个多分支语句,在它的代码块内可以有很多条件,在switch()里只能放入byte、short、int、char、String类型的变量或常量。
OK,选择结构可以理解了吧。那我们现在来理解循环结构,它包含有while(){}、do{ }while(); for( 表达式;条件判断;表达式) { } 这些都是用来循环的,也就是需要重复使用这些代码块的语句,我们需要在()里设置条件,条件成立则执行,不成立则退出循环,为了避免陷入死循环,我们还需要自动更新影响条件的变量值。或者说如果不选择更新,当已经得出我们想要的结果时,就可以马上退出循环。 这里需要用到 **break语句;来退出当前循环,如果不想执行此次循环,但想继续执行下次循环,可以用continue;**语句。现在我们来用for循环打印一张乘法口诀表吧。
#乘法代码块
在这里插入代码片 public static void main(String[] args) { for(int i = 1; i<=9; i++) { //表示行数 for(int j = 1; j<=i;j++) { //表示列数 System.out.print(j+"*"+i+"="+i*j+"\t"); } System.out.println(); } }
执行结果
看到了吗?很规范吧!可以看出循环了多少次吗?那就用外层循环乘以内层循环的次数。这是一个很简单的循环嵌套,就是双层循环的意思。你学会了吗?
Java数组
我们现在已经理解了流程控制,那我们现在再来了解一下数组。然后再来看两个算法:冒泡排序和二分查找。
数组,我们可以把它理解为相同数据类型的数据容器,比如说如果我们想存储很多人的年龄,或者是某一个类型相同的属性数据,那么就可以用到数组来表示,就用一维数组来表示非常的方便。
定义格式:数据类型【】数组名称 = {内容1,内容2…内容n}; 还有另外三种定义格式,但是这种方式最简洁。数据定义好后,我们可以用循环语句把它从头到尾一个个输出,专业用语叫遍历。
我现在就简单写个例子
for(int i = 0; i<数组名称.length; i++) {
System.out.println(数组名称[i]);
}
一维数组讲完了,那还有多维数组,可能用得少,可能有些统计全国省区市这些地方会用到。但二维数组会用到一些,那它的定义方式:
数据类型【】【】 数组名称 = new 数据类型【长度】【】;
那么它的遍历输出就有两层循环:
for(int i = 0; i<数组名称.length; i++) {
for(int j = 0; j<数组名称【i].length; j++){
System.out.println(数组名称[i][j]);
}
}
数组怎么样,是不是有点吃力,好吧,如果这样的话那就多敲几遍,慢慢巩固。
现在我们来说说冒泡排序,它有个口诀:n个数来排序,两两相邻作比较,大的往后,小的往前。外层循环length-1,这个length是值数组的长度。内层循环length-i-1。怎么样能理解吗?
我们来看哦,其实外层循环表示的是有轮数,表示我们循环多少轮,而内层循环表示每一轮(外层循环)的循环次数,而当我们每执行完一轮后,就会得出一个最值(最大或最小),那我们下次内层循环的次数就可以少比较一次。现在我们来看代码:
/*int[] nums = new int[] {1,3,9,5,6,7,15,4,8}; int temp; //在冒泡里要交换用的第三方变量 //使用冒泡排序 for(int i = 0; i<nums.length-1; i++) { for(int j = 0; j<nums.length-i-1; j++) { if(nums[j]>nums[j+1]) { temp = nums[j]; nums[j] = nums[j+1]; nums[j+1] = temp; } } }
循环完成,它就变成了一个有序数组了,不信,你自己再遍历输出看看。。。
弄清楚了吗?那我们现在来开始学习二分查找吧。它还有一个名字叫折半查找。什么意思呢?就是再一个有序的数组里找到一个你要的值。我们想节省时间,自然不会从头一个个去找。于是拿你要找的这个值与中间的值去比较,如果大于中间值就去中间值的右边范围找,并再右边范围的中间值比较,然后一步步循环直到找到那个值并退出循环。如果找不到我们就会发现最小值坐标会走到最大值坐标的右边。我现在写一下二分查找法的代码:
在这里插入代码片 int[] nums = new int[] {1,2,3,4,5,6,7,8}; int num = 6; //目标值 //定义最大下标、最小下标和中间下标,使用二分查找 int maxIndex = nums.length-1; int minIndex = 0; int midIndex = (maxIndex+minIndex)/2; while(true) { if(nums[midIndex]>num) { maxIndex = midIndex - 1; }else if(nums[midIndex]<num) { minIndex = midIndex + 1; }else { break; } if(minIndex > maxIndex) { System.out.println("数组里没有这个值,找不到"); midIndex = -1; break; } midIndex = (minIndex+maxIndex)/2; } System.out.println("已查找到6!它的下标为"+midIndex);
好了,运行一下,结果一定是对的。怎么样?二分查找法学会了吗?
Java项目
如果前面都学会了,那我们现在直接进入我们得项目环节吧。
任务:
完成双色球彩票程序。
玩法规则:
“双色球”每注投注号码由 6 个红色球号码和 1 个蓝色球号码
组成。红色球号码从 1—33 中选择,蓝色球号码从 1—16 中选择。
球的数字匹配数量和颜色决定了是否中奖,具体中奖规则:
一等奖:7个号码相符(6个红色球号码和1个蓝色球号码)(红色球号码顺序不限,下同);
二等奖:6个红色球号码相符;
三等奖:5个红色球号码和1个蓝色球号码相符;
四等奖:5个红色球号码或4个红色球号码和1个蓝色球号码相符;
五等奖:4个红色球号码或3个红色球号码和1个蓝色球号码相符;
六等奖:1个蓝色球号码相符(有无红色球号码相符均可)。
任务过程:
- 系统随机生成 6 个 1—33 的数字(代表红色球)+1 个 1—16 数字(代
表蓝色球)。 - 请用户输入 6 个不重复的 1—33 数字(代表红色球)+1 个 1—16 数字
(代表蓝色球)。 - 对比确认获得几等奖。
思路
准备好了吗?那我们现在就开始进入思路环节了。 首先我们需要系统生成双色球,双色球分别是6个红色球和1个蓝色球。那我们就可以准备定义一个有着6个长度得一维数组来记录红色球,还定义一个变量来记录蓝色球号码。那怎么系统生成呢?用Math.random()方法,这个方法可以随机产生0到1之间得数,我们就根据范围用它乘以最大范围值,就得出0——最大范围值,因为不能有0这个号码球,所以就是(Math.random()*最大范围值+1),由于它是产生的小数,找它进行强制转换成int类型。好了,这一步系统生成号码数我们就做完了。 第二步就是需要用户进行输入,首先是提示用户输入,输入记得**创建Scanner 对象,具体格式为 Scanner 对象名 = new Scanner(System.in);** 然后我们需要进行两步提示与输入,第一步是输入6个红色球号码,在输入之后我们需要进行判断,是不是数字值?是不是在范围内?是不是重复?条件都满足的话,我们将进行赋值,不满足则提示并退出程序。这一步完成后,再进行蓝色球的输入,也是需要进行一样的判断,但只有一个蓝色球,就不要进行判断是否重复。 第三步就是进行判断。我们首先是定义了一个变量记录红色球被选中的数量,再定义了一个记录蓝色球被选中的数量的变量。继而我开始把用户输入的号码和系统生成的六个号码 一 一进行比较,就可以得出红色球中奖的数量。在这步我们就循环遍历红色球一维数组,它每次循环分别和用户输入的6个号码比较6次。这样循环完了,我们就可以得出被选中的个数了。那蓝色球呢?其实很容易,一个if语句,因为变量和变量比较,一个号码和一个号码比较。当我们比较完了,知道被选中的数量后,我们就可以根据这些数量进行if语句判断,根据规则放进对应的条件就可以判断是否中奖了。 怎么样?思路理清了,有没有跃跃欲试的感觉,那就开始吧。 我把我的代码给到大家,用来参考:
参考代码
public static void main(String[] args) { //第一步系统生成双色球 //用来记录系统生成的6个红色球 int[] red = new int[6]; //用来记录系统生成的1个蓝色球,范围在1-16 int blue = (int) (Math.random()*15+1); //红色球范围在1-33,遍历赋值 for(int i = 0; i<red.length; i++) { red[i] = (int) (Math.random()*32+1); } //第二步 用户进行输入 //提示用户 System.out.println("------------欢迎来到双色球福利彩票程序-------------"); System.out.println("请问你是否要买票!输入true选择买,输入false即将退出程序"); Scanner input = new Scanner(System.in); boolean b = false; if(input.hasNextBoolean()) { b = input.nextBoolean(); }else { System.out.println("你输入有误,即将退出程序..."); return; } //定义存储用户输入的变量 int red1; int red2; int red3; int red4; int red5; int red6; int blue1; //用户开始输入号码 if(b) { System.out.println("现在请你输入你要买的六个红色球的号码:"); if(input.hasNextInt()) { //必须为数字 red1 = input.nextInt(); if(red1>33||red1<1) { //不许超过范围 System.out.println("没有这个号码..."); return; } }else { System.out.println("你的第一个红色球号码输入有误..."); return; } if(input.hasNextInt()) { //必须为数字 red2 = input.nextInt(); if(red2>33||red2<1) { //不许超过范围 System.out.println("没有这个号码..."); return; } if(red2==red1) { //不许有重复值 System.out.println("你的号码有重复..."); return; } }else { System.out.println("你的第二个红色球号码输入有误..."); return; } if(input.hasNextInt()) { //必须为数字 red3 = input.nextInt(); if(red3>33||red3<1) { //不许超过范围 System.out.println("没有这个号码..."); return; } if(red3==red1 || red3==red2) { //不许有重复值 System.out.println("你的号码有重复..."); return; } }else { System.out.println("你的第三个红色球号码输入有误..."); return; } if(input.hasNextInt()) { //必须为数字 red4 = input.nextInt(); if(red4>33||red4<1) { //不许超过范围 System.out.println("没有这个号码..."); return; } //不许有重复值 if(red4==red1 || red4==red2|| red4==red3) { System.out.println("你的号码有重复..."); return; } }else { System.out.println("你的第四个红色球号码输入有误..."); return; } if(input.hasNextInt()) { //必须为数字 red5 = input.nextInt(); if(red5>33||red5<1) { //不许超过范围 System.out.println("没有这个号码..."); return; } //不许有重复值 if(red5==red1 || red5==red2|| red5==red3|| red5==red4) { System.out.println("你的号码有重复..."); return; } }else { System.out.println("你的第五个红色球号码输入有误..."); return; } if(input.hasNextInt()) { //必须为数字 red6 = input.nextInt(); if(red6>33||red6<1) { //不许超过范围 System.out.println("没有这个号码..."); return; } //不许有重复值 if(red6==red1 || red6==red2|| red6==red3|| red6==red4|| red6==red5) { System.out.println("你的号码有重复..."); return; } }else { System.out.println("你的第六个红色球号码输入有误..."); return; } System.out.println("------------------------------"); System.out.println("现在请你输入你要买的一个蓝色球的号码:"); if(input.hasNextInt()) { blue1 = input.nextInt(); if(blue1>16|| blue1<1) { //不许超过范围 System.out.println("没有这个号码..."); return; } }else { System.out.println("你的蓝色球号码输入有误..."); return; } }else { System.out.println("欢迎下次光临,即将为你退出程序..."); return; } //第三步 进行判断用户是否中奖 int countred = 0; //用来记录红色球中奖的数量 int countblue = 0; //用来记录蓝色球中奖的数量 //把用户输入的号码和系统生成的六个号码一一比较,就可得出红色球中奖的数量 for(int i = 0; i<red.length; i++) { if(red1==red[i]) { countred++; } if(red2==red[i]) { countred++; } if(red3==red[i]) { countred++; } if(red4==red[i]) { countred++; } if(red5==red[i]) { countred++; } if(red6==red[i]) { countred++; } } //判断蓝色球是否中奖 if(blue1==blue) { countblue++; } //判断用户是否中奖 if(countred==6&&countblue==1) { System.out.println("恭喜你,中了一等奖..."); }else if(countred==6) { System.out.println("恭喜你,中了二等奖..."); }else if(countred==5&&countblue==1) { System.out.println("恭喜你,中了三等奖..."); }else if((countred==5)||(countred==4&&countblue==1)) { System.out.println("恭喜你,中了四等奖..."); }else if((countred==4)||(countred==3&&countblue==1)) { System.out.println("恭喜你,中了五等奖..."); }else if((countred==2&&countred==1)||(countred==1&&countblue==1)||(countred==0&&countblue==1)) { System.out.println("恭喜你,中了六等奖..."); }else { System.out.println("很遗憾,你没有中奖..."); } }
运行结果:
怎么样?做完了之后是不是特有成就感。但请注意写完这个项目不要以为能运行就觉得成功了,可以多测试一下,多检查几遍,不然别人用你这个程序很容易出现bug.
看完的你,如果也喜欢java的话,那就点个关注吧。我会保持每周一更的,谢谢 。
- 【程序源代码】spring boot文档在线预览
- java-Arraylist集合实现模拟快递柜
- JAVA小白进阶day22
- 15、SpringBoot:SpringSecurity
- java中的常用注解:@Target、@Retention、@Document、@Inherited
- SpringBoot自动配置原理
- Java构建File对象的三种方法
- Java项目-OS监控的相关源码
- springboot实现分页插件
- Springbootshi实现下载文件和上传文件
- spring的声明式事务管理
- spring-aop通知实现
- 他仅仅是个Java1年经验,面试16K的外派支付宝,你们说香吗
- SpringBoot集成Swagger2配置
- Spring Boot 2.3.3 正式发布!
- Java面向对象特性_继承 ——恋天小结
- Java_Integer(包装类) ——恋天小结
- Java_Enumeration(枚举) ——恋天小结
- java-方法-方法重载
- java.net.ConnectException: Connection refused: connect