您的位置:首页 > 编程语言 > Java开发

Java:每个人都能学会

2020-08-15 17:53 113 查看

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个蓝色球号码相符(有无红色球号码相符均可)。

任务过程:

  1. 系统随机生成 6 个 1—33 的数字(代表红色球)+1 个 1—16 数字(代
    表蓝色球)。
  2. 请用户输入 6 个不重复的 1—33 数字(代表红色球)+1 个 1—16 数字
    (代表蓝色球)。
  3. 对比确认获得几等奖。

思路

准备好了吗?那我们现在就开始进入思路环节了。
首先我们需要系统生成双色球,双色球分别是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的话,那就点个关注吧。我会保持每周一更的,谢谢 。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: