首页 > 编程语言 >Java基础1

Java基础1

时间:2023-07-15 17:22:46浏览次数:33  
标签:Java int 基础 System sumDays println public out

Java基础1

whitch

  • break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构
  • switch结构中的表达式,只能是如下的6种数据类型之一:
    byte . short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)
  • case 之后只能声明常量。不能声明范围。
  • break关键字是可选的。
  • default也是可选的,位置随机但一般放后面
  • 如某switch-case结构中的多个case的执行语句相同,则可以考虑进行合并
package com.xin.base;

import java.util.Scanner;

public class Day71300 {
    //从键盘上输入2019年的"“month”和“day”,要求通过程序输出输入的日期为2019年的第几天。
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入月份");
        int month = scanner.nextInt();
        System.out.println("请输入月份的天数");
        int day = scanner.nextInt();
        scanner.close();
        int sumDays=0;
        switch (month) {//月份倒写,不写break,利用穿透,
            case 12:
                sumDays += 30;//写法要简单
            case 11:
                sumDays = sumDays+ 31;
            case 10:
                sumDays = sumDays+ 30;
            case 9:
                sumDays = sumDays+31;
            case 8:
                sumDays = sumDays+31;
            case 7:
                sumDays = sumDays+ 30;
            case 6:
                sumDays = sumDays+ 31;
            case 5:
                sumDays = sumDays+ 30;
            case 4:
                sumDays = sumDays+ 31;
            case 3:
                sumDays = sumDays+28;
            case 2:
                sumDays = sumDays+31 ;
            case 1:
                sumDays = sumDays+day;
                break;
            default:
                System.out.println("输入错误");
        }
        System.out.println("总天数是"+sumDays);
    }

}

输出1到100中所有的质数

package com.xin.base;

public class Day71301 {
    public static void main(String[] args) {
        //输出1到100中所有的质数
        boolean isFlag=true;
        for (int i = 2; i < 101; i++) {//遍历1-100
            for (int j = 2; j <i; j++) {//对比所有被除数2-i//并不能用i/2,会直接跳出,也不能用=,这样质数也被包含在内
                if (i%j==0){//i被j除尽,不是
                    isFlag=false;
                }
            }
            if (isFlag){
                System.out.println(i);

            }
            isFlag=true;
        }
    }
}

输出1到10000中所有的质数,优化

package com.xin.base;

public class Day71301 {
    public static void main(String[] args) {
        //输出1到100中所有的质数
        boolean isFlag=true;
        int count=0;
        //获取当前时间距离1970-1-1 00:00:00的毫秒数
        long start=System.currentTimeMillis();
        for (int i = 2; i < 100000; i++) {//遍历1-100
            for (int j = 2; j <=Math.sqrt(i); j++) {//优化2:对本身的质数的自然数有效8>>3
                if (i%j==0){//i被j除尽,不是
                    isFlag=false;
                    break;//优化1:只对本身是非质数的自然数是有效的8>>5
                }
            }
            if (isFlag){
                //System.out.println(i);
                count++;
            }
            isFlag=true;
        }
        //获取当前时间距离1970-1-1 00:00:00的毫秒数
        long end=System.currentTimeMillis();
        System.out.println("所花费的时间为"+(end-start));
        System.out.println(count);
    }
}

输出1到10000中所有的质数,优化lable

package com.xin.base;

public class Day71400 {
    public static void main(String[] args) {
        //输出1到100000中所有的质数

        int count=0;
        //获取当前时间距离1970-1-1 00:00:00的毫秒数
        long start=System.currentTimeMillis();
        lable:for (int i = 2; i < 100000; i++) {//遍历1-100
            for (int j = 2; j <=Math.sqrt(i); j++) {//优化2:对本身的质数的自然数有效8>>3
                if (i%j==0){//i被j除尽,不是
                   continue lable;
                }
            }
                count++;
            }

        //获取当前时间距离1970-1-1 00:00:00的毫秒数
        long end=System.currentTimeMillis();
        System.out.println("所花费的时间为"+(end-start));
        System.out.println(count);
    }
}


家庭收支记账软件

package com.xin.base;

import java.util.Scanner;

public class Day71401 {
    //家庭收支记账软件
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
            String[] IAE=new String[99];//收支
            int[] money=new int[99];//账户金额
            int[] IAEMoney=new int[99];//收支金额
            String[] explain=new String[99];//说明
            int sum=0;//存储次数
        //基础数据放在循环前面,防止重置
            lable:while (true){
                System.out.println("-----------家庭收支记账软件-----------");
                System.out.println("1.收支明细");
                System.out.println("2.登记收入");
                System.out.println("3.登记支出");
                System.out.println("4.退出");
                System.out.println("请选择【1-4】:");//每次循环都需要的放在循环中的上位
                int select=scanner.nextInt();
            switch (select) {
                case 1://查看收支
                    System.out.println("----------当前收支明细记录----------");
                    System.out.println("收支    账户金额     收支金额    说明 ");
                    for (int i = 1; i <= sum; i++) {
                        System.out.println(IAE[i] + "      " + money[i] + "         " + IAEMoney[i] + "        " + explain[i]);
                    }
                    break;
                case 2://增加收入情况
                    sum++;
                    System.out.println("本次收入金额:");
                    IAE[sum] = "收入";
                    IAEMoney[sum] = scanner.nextInt();
                    money[sum] = money[sum - 1] + IAEMoney[sum];
                    System.out.println("本次收入说明:");
                    explain[sum] = scanner.next();
                    break;
                case 3://增加支出情况
                    sum++;
                    System.out.println("本次支出金额:");
                    IAE[sum] = "支出";
                    IAEMoney[sum] = scanner.nextInt();
                    money[sum] = money[sum - 1] - IAEMoney[sum];
                    System.out.println("本次支出说明:");
                    explain[sum] = scanner.next();

                    break;
                case 4://是否退出程序
                    System.out.println("是否选择退出(y,n)");
                    while (true) {
                        String quit = scanner.next();
                        if (quit.equals("y")) {
                            break lable;
                        } else if (quit.equals("n")) {
                            continue lable;
                        } else {
                            System.out.println("输入错误,请重新输入:");
                            continue;
                        }

                    }
                default:
                    System.out.println("输入错误,请重输");
            }

        }
    }
}


补充:衡量一个功能代码的优劣:

  1. 正确性

  2. 可读性

  3. 健壮性

  4. 高效率与低存储


数据结构:

1.数据与数据之间的逻辑关系:集合、一对一、一对多、多对多

2.数据的存储结构:
线性表:顺序表(比如:数组)、链表、栈、队列
树形结构:二叉树

图形结构

算法:

排序算法:

搜索算法:


使用二维数组打印一个1行杨辉三角。

【提示】
1.第一行有1个元素,第n行有n个元素

2.每一行的第一个元素和最后一个元素都是1
3.从第三行开始,对于非第一个元素和最后一个元素的元素。即:
yanghui[i][]=yanghui[i-1][j-1] + vanghui.[i-1][j];

package com.xin.base;

import java.util.Arrays;

public class Day71500 {
    //杨辉三角000
    public static void main(String[] args) {
        int[][] a=new int[10][10];
        for (int i = 0; i < 10; i++) {
            a[i][0]=1;
            for (int j = 1; j < 10; j++) {
                if (i==j){
                    a[i][j]=1;
                }else if (i>0){
                    a[i][j]=a[i-1][j-1]+a[i-1][j];
                }else {
                   // continue;
                }
            }
        }
        for (int[] b:a) {
            System.out.println(Arrays.toString(b));
        }

    }
}

标答

package com.xin.base;

public class Day71501 {
    public static void main(String[] args) {
        //1.声明并初始化二维数组
        int[][] yanghui=new int[10][];
        //2.给数组元素赋值,每列个数不一样
        for (int i = 0; i < yanghui.length; i++) {
            yanghui[i]=new int[i+1];//给1维数组新建数组
            //2.1给首末元素赋值
            yanghui[i][0]=1;
            yanghui[i][i]=1;
            //2.2给每行的非首末元素赋值
            if (i>0){
                for (int j = 1; j <yanghui[i].length-1; j++) {
                    yanghui[i][j]=yanghui[i-1][j-1]+yanghui[i-1][j];
                }
            }
        }
        //3.遍历二维数组
        for (int i = 0; i < yanghui.length ; i++) {
            for (int j = 0; j < yanghui[i].length; j++) {
                System.out.print(yanghui[i][j]+" ");
            }
            System.out.println();
        }
    }
}

感悟

  1. 要有整体的逻辑框架
  2. 不必直接思考核心元素,先搭好框架
  3. 把必要的步骤写出来,逻辑分开,不要揉在一团

回形针

package com.xin.base;

import java.util.Scanner;

public class Day71503 {
    /*
     * 回形针填数的实现
     * 回形针填数实现需要用到二维数组
     *
     */

        public static void main(String[] args) {
//		先确定要输入的回形针长度
            Scanner scanner=new Scanner(System.in);
            System.out.println("请输入回形针的长度");
            int len =scanner.nextInt();
//		定义一个二维数组
            int arr1[][]=new int [len][len];
            int number=0;//回形针中要现实的数据
            int maxx=len-1;//横向最大长度
            int maxy=len-1;//纵向最大值
            int minx=0;//横向最小值
            int miny=0;//纵向最小值
            while(minx<=maxx) {//判断条件为最小值循环自加后是否等于最大值,以此来作为构造回形针结束的依据
                for(int m=minx;m<=maxx;m++) {//开始向右横向走
                    arr1[minx][m]=++number;//利用++运算符进行自加后赋值给数组
                }
                miny++;
                for(int m=miny;m<=maxy;m++) {//再向下纵向走
                    arr1[m][maxy]=++number;
                }
                maxx--;
                for(int x=maxx;x>=minx;x--) {//再向左横向走
                    arr1[maxy][x]=++number;
                }
                maxy--;
                for(int m=maxy;m>=miny;m--) {//在向上纵向走,完成一次循环。
                    arr1[m][minx]=++number;
                }
                minx++;
            }
//		遍历数组arr1
            for(int i=0;i<arr1.length;i++) {
                for(int j=0;j<arr1[i].length;j++) {
                    System.out.print(arr1[i][j]+"\t");
                }
                System.out.println();//打印完一行后换行
            }

        }
    }

array1=array2

array1和array2地址值相同,都指向了堆空间的唯一的一个数组实体。

数组复制

string[] arr1 =new String[arr.length];
for(int i = 0;i <arr1 .length;i++){
arr1[i] = arr[i];
}

二分法查找:

前提:所要查找的数组必须有序。

package com.xin.base;

public class Day71504 {
    public static void main(String[] args) {
        int[] arr={-98,-34,2,34,54,66,79,105,210,333};
        int dest=4;
        int head=0;//初始的首索引
        int end=arr.length-1;//初始的末索引
        boolean isFlag=true;
        while(head<=end){
            int middle=(head+end)/2;
            if (dest==arr[middle]){
                System.out.println("找到了指定的元素,位置为:"+middle);
                isFlag=false;
                break;
            }else if (arr[middle]>dest){
                end=middle-1;
            }else {
                head=middle+1;
            }
        }
        if (isFlag){
            System.out.println("很遗憾,没有找到");
        }
    }
}


排序

  1. 冒泡排序
  2. 快速排序

排序思想:
1.从数列中挑出一个元素,称为"基准”( pivot) ,
2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准
值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数
列排序。
4.递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好
了。虽然一直递归下去,但是这个算法总会结束,因为在每次的迭代( iteration)中,它至少会把一个元素摆到它最后的位置去。

image-20230715164554602

image-20230715165315846

标签:Java,int,基础,System,sumDays,println,public,out
From: https://www.cnblogs.com/xin-zhi-suo-xiang/p/17556540.html

相关文章

  • Java标识符和关键字
    Java标识符和关键字标识符Java所有的组成部分都需要名字类名.变量名以及方法名都被称为标识符注意点:所有的标识符都应该以(AZ或者az),美元符($),或者下划线开始首字符之后可以是字母(AZ或者az),美元符($),下划线(_)或数字的任何字符组合不能使用关键字作为变量名或......
  • C基础2
    字符数组charc1[]={'c','','p','r','o','g'};charc2[]="cprog";//末尾以'\0'为结束符用字符串方式赋值比用字符逐个赋值要多占1个字节,用于存放字符串结束标志'\0';'\0'由编译系统自动加上的 gcc编译过程gcc-Ehell......
  • sql注入基础
    sql注入           意义是:用户在提交表单时输入恶意的sql语句,欺骗后端把其当作正常的数据执行 注入方式分类有两种         按照注入方式分:union注入、布尔盲注、时间注入、报错注入         按照注入点类型分:字符型、数字型  一、按......
  • 从头学Java17-今天的Kotlin更香吗
    出于各种限制,很多公司依然停留在Java8,部分小伙伴转向了Kotlin。Kotlin作为静态编译语言,提供大量语法糖,而且编译后的字节码跟Java一致。当时,Java8于2014年发布,Kotlin于2016年,很多宣称的语法糖都是对比的Java8。不禁要问,相对今天的Java17,Kotlin优势还在吗?现在就用最新的Kotlin1.9......
  • Java的注释
    Java的注释单行注释可以注释一行文字//多行注释可以注释一段文字/*注释*/JavaDoc:文档注释/***/......
  • Java环境搭建
    Java环境搭建卸载JDK删除java的安装目录删除JAVA_HOME删除path下关于java的目录Win+R:输入cmd,运行java-version,查看运行结果安装JDK百度搜索JDK8,找到下载地址同意协议下载电脑对应的版本双击安装JDK记住安装的路径配置环境变量我的电脑->右键->......
  • 利用java实现图片表格检测与结构识别
    GuideOverviewRequirementsDemoModulesOverviewThisjavapackagecontainsmodulestohelpwithfindingandextractingtabulardatafromaPDForimageintoaCSVformat.Givenanimagethatcontainsatable…ExtractthethetextintoaCSVform......
  • shell脚本基础
    1.shell基础1.1简介shell介绍shell应用场景:系统管理,文件操作等1.2解释器解释器是一种命令解释器,主要作用是对命令进行运行和解释,将需要执行的操作传递给操作系统内核并执行指定解释器#!/usr/bin/python3不指定,默认就是这个#!/bin/bash#这是一个shell脚本#byliech......
  • Java流程控制
    Java流程控制Scanner对象之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入。Java.util.Scanner是Java5的新特性,我们可以通过Scanner类来获取用户的输入。基本语法:Scanners=newScanner(System.in);通......
  • Java基础
    跨平台原理Java的跨平台基于编译器和JVM。编译器把源文件编译成与平台无关的字节码class文件,JVM把该文件解释成与平台有关的机器码指令,在平台上执行。Java面向对象的4个特征1抽象提取对象的共性,构成抽象类或接口,由继承抽象类的类或接口的实现类来重写抽象方法。2继承子类继承......