讨教亲戚里一位工作五六年的程序员,得到了一些指导。
2021.12.1号正式开始学java,12月完成尚硅谷的基础学习,作为笔记记录。
今天是学习的第十天,把自己从笔记里再度整理的重点知识梳理一下。
1.位运算
2*8 -------2<<3 or 8<<1
2.扫描
头一次接触,当天晚上整理时记录了一下,现在学到了import关键字,更理解了一些。
importjava.util.Scanner;
public class Scanner{
public static void main(String args){
//这里实际上是新建一个Scanner分类的变量;
Scanner scan=new Scanner(System.in);
string name=scan.next();
//要记得大写
int age=scan.nextInt();
double weight=scan.nextDouble();
}
}
3.随机数
同理,头一次接触随机数也是刚开始不理解,以为每项都需要记忆,现在明白这里是调用了方法。
int value=(int)(Math.random()*90+10)
\*
1.首先随机数的初始类型为float型
并且范围为[0.0,1.0)
2.为了保证随机出的数为输入的变量类型,需要前加(int)强转
3.目标范围[a,b]
公式:*(b-a+1)+a
\*
4.字符串比较
__.equals("__")
可以比较字符串是否一样
5.Switch....case 语句
这里有一个比较经典的,给出年月日,求算是第几天的代码
根据条件,判断入口,相符入口就进入。
进入后无break会接着顺序全部执行。
import java.util.Scanner;
class DayFind{
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
System.out.println("Enter 2021's month:");
int month=scan.nextInt();
System.out.println("Enter 2021's day");
int day=scan.nextInt();
int sumDays=0;
switch(month){
case 12:
sumDays +=30;
case 11:
sumDays +=31;
case 10:
sumDays +=30;
case 9:
sumDays +=31;
case 8:
sumDays +=31;
case 7:
sumDays +=30;
case 6:
sumDays +=31;
case 5:
sumDays +=30;
case 4:
sumDays +=31;
case 3:
sumDays +=28;
case 2:
sumDays +=31;//add 1month
case 1:
sumDays += day;
}
System.out.println("2021 "+month+" month "+day+" is the "+sumDays+" day");
}
}
import java.util.Scanner;
//break的用法
class SwitchTest1{
public static void main(String[] args){
Scannerscan=new Scanner(System.in);
int score=scan.nextInt();
switch(score/10)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("lose");
break;
case 6:
case 7:
case 8:
case 9:
case 10:
System.out.println("pass");
break;
}
}
}
6. for循环
我觉得是和if语句使用最多的,刚接触稍微有一点点不顺。
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package wbyjavatrip;
import java.util.Scanner;
public class ForTest1 {
public ForTest1() {
}
public static void main(String[] args) {
Scanner scan1 = new Scanner(System.in);
System.out.println("输入m1:");
int m1 = scan1.nextInt();
System.out.println("输入n1:");
int n1 = scan1.nextInt();
int max1 = m1 <= n1 ? n1 : m1;
for(int i1 = max1; i1 <= m1 * n1; ++i1) {
if (i1 % n1 == 0 && i1 % m1 == 0) {
System.out.println("最小公倍数:" + i1);
break;
}
}
}
}
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package wbyjavatrip;
//最小公约数
import java.util.Scanner;
public class ForTest {
public ForTest() {
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("输入m:");
int m = scan.nextInt();
System.out.println("输入n:");
int n = scan.nextInt();
int min = m <= n ? m : n;
for(int i = min; i >= 1; --i) {
if (m % i == 0 && n % i == 0) {
System.out.println(i);
break;
}
}
}
}
寻找完数
package Easywork;
public class FindWanNumber {
public static void main(String[] args){
int sum=0;
for(int i=2;i<=1000;i++)
{for(int j=1;j<i;j++)
{ if(i%j==0)
{sum+=j;}
}
if (sum==i)
{System.out.println(sum);
}
sum=0; }
}
}
7.If
写的比较难的一个是三数比较大小并且输出
import java.util.Scanner;
//彩票机器
class RanIf{
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
int num1=(int)(Math.random()*90+10);
System.out.println("Enter ur number");
int num2=scan.nextInt();
if(num1/10==num2/10&&num1%10==num2%10)
{System.out.println("u win 10000$");}
else if(num1/10==num2%10&&num1%10==num2/10)
{System.out.println("u win 3000$");}
else if(num1/10==num2/10&&num1%10!=num2%10)
{System.out.println("u win 1000$");}
else if(num1/10!=num2/10&&num1%10==num2%10)
{System.out.println("u win 1000$");}
else if(num1/10==num2%10&&num1%10!=num2/10)
{System.out.println("u win 500$");}
else if(num1%10==num2/10&&num1/10!=num2%10)
{System.out.println("u win 500$");}
else
{System.out.println("u lose");}
}
}
import java.util.Scanner;
//比较3大小 输出
class ScanIfExer{
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
System.out.println("Enter num1");
double num1=scan.nextDouble();
System.out.println("Enter num2");
double num2=scan.nextDouble();
System.out.println("Enter num3");
double num3=scan.nextDouble();
if(num1>num2)
{if(num2>num3)
{System.out.println(num3+" "+num2+" "+num1);}
else
{if(num1>num3)
{System.out.println(num2+" "+num3+" "+num1);}
else{System.out.println(num2+" "+num1+" "+num3);}}}
else{if(num2<num3){System.out.println(num1+" "+num2+" "+num3);}
else{if(num3>num1){System.out.println(num1+" "+num3+" "+num2);}
else{System.out.println(num3+" "+num1+" "+num2);}}}
}
}
8.do...while循环
这个感觉用的比较少,使用必定输出一回
package Easywork;
//流程控制的综合运用
import java.util.Scanner;
public class FamilyAccount {
public static void main(String[] args){
boolean Flag=true;
//记录详情
String details="收支\t账户金额\t收支金额\t说 明\n";
//初始金额
int balance=10000;
while(true){
System.out.println("-----------------家庭收支记账软件-----------------");
System.out.println(" 1 收支明细 ");
System.out.println(" 2 登记收入 ");
System.out.println(" 3 登记支出 ");
System.out.println(" 4 退 出 \n");
System.out.println(" 请选择(1-4): ");
char selection=Utility.readMenuSelection();
switch(selection){
case '1':
System.out.println("-----------------当前收支明细记录-----------------");
System.out.println(details);
System.out.println("--------------------------------------------------");
//System.out.println("1 收支明细");
break;
case '2':
//System.out.println("2 登记收入");
System.out.println("本次输入金额: ");
int money=Utility.readNumber();
System.out.println("本次输入说明: ");
String info=Utility.readString();
//处理balance
balance+=money;
//处理details
details+=("收入\t"+balance+"\t\t"+money+"\t\t\t"+info+"\n");
System.out.println("-----------------登记完成-----------------");
break;
case '3':
//System.out.println("3 登记支出");
System.out.println("本次支出金额: ");
int money1=Utility.readNumber();
System.out.println("本次支出说明: ");
String info1=Utility.readString();
if(balance>=money1){
balance-=money1;
}else{
System.out.println("账户额度不够");
}
details+=("支出\t"+balance+"\t\t\t"+money1+"\t\t"+info1+"\n");
System.out.println("-----------------登记完成-----------------");
break;
case '4':
//System.out.println("4 退 出");
System.out.println("确认是否退出(Y/N): ");
char isExit=Utility.readConfirmSelection();
if(isExit=='Y'){
Flag=false;
}
}
}
}
}
9.数组
数组的思维需要掌握,多维数组更是如此
arr[0]-arr[n-1] n个数
String arr[5] 数组为5个空位
int 0
double 0.0
boolean false
指针指向null 如果未赋值
遍历:for循环每个值输出一遍
内存解析 栈 堆
数组长度:arr.length
二维数组:int[][] arr=new int [] []{{1,2},{3,4,5},{7,8,9}};
int[][] arr1=new int[3][2];
int[][] arr1=new int[3][];
10.数组的操作
遍历
package Easywork;
public class FindPhoneNumber {
public static void main(String[] args) {
int[] arr = new int[] { 8, 2, 1, 0, 3 };
int[] index = new int[] { 2, 0, 3, 2, 4, 0, 1, 3, 2, 3, 3 };
String tel = "";
for (int i = 0; i < index.length; i++) {
tel += arr[index[i]];
}
System.out.println("手机号:" + tel);
}
}
复制
最大 最小 平均 总和
package Easywork;
public class ArrayMaxMinAvgSum {
public static void main(String[] args){
int[] arr=new int[10];
for(int i=0;i<arr.length;i++)
{
arr[i]=(int)(Math.random()*90+10);
}
//max
int max=0;
for(int i=0;i<arr.length;i++)
{
if(max<arr[i]){
max=arr[i];
}
}
//min
int min=arr[0];
for(int i=0;i<arr.length;i++)
{
if(min>arr[i]){
min=arr[i];
}
}
//allsum
int sum=0;
for(int i=0;i<arr.length;i++)
{
sum+=arr[i];
}
//avg
int ave=sum/arr.length;
}
}
反转
查找:线性
package Easywork;
public class LineSearch {
public static void main(String[] args){
//线性查找方法
String[]arr=new String[]{"JJ","DD","MM","BB","GG","AA"};
String dest="BB";
boolean Flag=false;
for(int i=0;i<arr.length;i++){
if(dest.equals(arr[i])){
System.out.println("在第"+i+"个");
Flag=true;
break;
}
}
if(Flag==false){
System.out.println("很遗憾,没有");}
}
}
二分
package Easywork;
public class Two2TwoSarch {
public static void main(String[] args){
//二分法查找
//前提:必须有序!
int[] arr={-98,-34,2,34,54,66,79,105,210,333};
int dest=-34;
int head=0;//初始
int end=arr.length-1;//末索引
boolean Flag=true;
while(head<=end){
int middle=(head+end)/2;
if(dest==arr[middle]){
System.out.println("找到,位置为"+middle);
Flag=false;
break;
}
else if(arr[middle]>dest){
end=middle-1;
}else{
head=middle+1;
}
}
if(Flag==true){
System.out.println("没找到");
}
}
}
定义头尾值
中间=(头+尾)/2
排序:冒泡
两轮循环
第一轮找找最大数
第二轮判断相邻
package Easywork;
import java.util.Arrays;
public class Bubble {
public static void main(String[] args){
int[]arr=new int[]{34,5,22,-98,6,-76,0,-3};
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]);
}
System.out.println(Arrays.toString(arr));
for(int i=0;i<arr.length/2;i++){
int temp=arr[i];
arr[i]=arr[arr.length-i-1];
arr[arr.length-i-1]=temp;
}
System.out.println(Arrays.toString(arr));
int[]arr1=new int[arr.length];;
for(int i=0;i<arr.length;i++){
arr1[i]=arr[i];
}
System.out.println(Arrays.toString(arr1));
int num=22;
boolean Flag=false;
for(int i=0;i<arr.length;i++){
if(arr[i]==num){
System.out.print("所查找的数字存在,位置在 "+"arr["+i+"]");
Flag=true;
}
}
if(Flag=false){
System.out.print("所查找的数字不存在");
}
}
}
package Easywork;
public class BubbleAndSearch {
public static void main(String[] args){
Student[] stus=new Student[19];
for (int i=0;i<stus.length;i++){
//数组元素赋值
stus[i]=new Student();
//对象的属性赋值
stus[i].number=(i+1);
stus[i].state=(int)(Math.random()*(6-1+1)+1);
stus[i].score=(int)(Math.random()*(100-0+1));
}
//打印三年级的学生信息
for(int i=0;i<stus.length;i++){
if(stus[i].state==3){
System.out.println(stus[i].info());
}
}
//冒泡算法排成绩高低,遍历所有学生信息
for(int i=0;i<stus.length-1;i++){
for(int j=0;j<stus.length-1-i;j++)
{
if(stus[j].score>stus[j+1].score){
//此时交换对象! 不是交换数值
Student temp=stus[j];
stus[j]=stus[j+1];
stus[j+1]=temp;
}
}
}
for(int i=0;i<stus.length;i++)
System.out.println(stus[i].info());
}
}
class Student {
int number;
int state;
int score;
public String info(){
String info="学号:"+number+" "+"年级:"+state+" "+"成绩:"+score+" ";
return info;
}
}
快速
package Easywork;
import java.util.Arrays;
public class QuickerSort {
private static int partition(int[] arr, int low, int high) {
//指定左指针i和右指针j
int i = low;
int j= high;
//将第一个数作为基准值。挖坑
int x = arr[low];
//使用循环实现分区操作
while(i<j){//5 8
//1.从右向左移动j,找到第一个小于基准值的值 arr[j]
while(arr[j]>=x && i<j){
j--;
}
//2.将右侧找到小于基准数的值加入到左边的(坑)位置, 左指针想中间移动一个位置i++
if(i<j){
arr[i] = arr[j];
i++;
}
//3.从左向右移动i,找到第一个大于等于基准值的值 arr[i]
while(arr[i]<x && i<j){
i++;
}
//4.将左侧找到的打印等于基准值的值加入到右边的坑中,右指针向中间移动一个位置 j--
if(i<j){
arr[j] = arr[i];
j--;
}
}
//使用基准值填坑,这就是基准值的最终位置
arr[i] = x;//arr[j] = y;
//返回基准值的位置索引
return i; //return j;
}
private static void quickSort(int[] arr, int low, int high) {//???递归何时结束
if(low < high){
//分区操作,将一个数组分成两个分区,返回分区界限索引
int index = partition(arr,low,high);
//对左分区进行快排
quickSort(arr,low,index-1);
//对右分区进行快排
quickSort(arr,index+1,high);
}
}
public static void quickSort(int[] arr) {
int low = 0;
int high = arr.length-1;
quickSort(arr,low,high);
}
public static void main(String[] args) {
//给出无序数组
int arr[] = {72,6,57,88,60,42,83,73,48,85};
//输出无序数组
System.out.println(Arrays.toString(arr));
//快速排序
quickSort(arr);
//partition(arr,0,arr.length-1);
//输出有序数组
System.out.println(Arrays.toString(arr));
}
}
11.Arrays工具组
数组综合运用
package Easywork;
import java.util.Scanner;
public class StudentGrade {
public static void main(String[] args){
System.out.println("输入学生人数: ");
Scanner scan= new Scanner(System.in);
int number=scan.nextInt();
int[] grades=new int[number];
System.out.println("请输入"+number+"个成绩");
for(int i=0;i<grades.length;i++){
grades[i]=scan.nextInt();
}
//获取数组的最大值!!!!
int max=0;
for(int i=0;i<grades.length;i++){
if(grades[i]>=max){
max=grades[i];
}
}
System.out.println("最高分为:"+max);
for(int i=0;i<grades.length;i++){
if(grades[i]>=(max-10))
{
System.out.println("student"+i+" grade is "+grades[i]+" levle is A");
}
else if(grades[i]>=(max-20))
{
System.out.println("student"+i+" grade is "+grades[i]+" levle is B");
}
else if(grades[i]>=(max-30))
{
System.out.println("student"+i+" grade is "+grades[i]+" levle is C");
}
else
{System.out.println("student"+i+" grade is "+grades[i]+" levle is D");}
}
}
}
12.递归
方法调用递归
1-100累加
斐波那契数列
package Easywork;
//递归!
// 1-100所有数的和!
//f1=1,f0=4,f(n+2)=2*f(n+1)+f(n);
//费波纳列数列
public class Recursion{
public static void main(String[] args){
Recursion a=new Recursion();
System.out.println(a.getSum(100));
//1-10 sum
a.f(10);
System.out.println(a.f(10));
//n项斐波那契数列
a.Fibonacci(10);
System.out.println(a.Fibonacci(10));
}
public int getSum(int n){
if(n==1){
return 1;
}else{
return n+getSum(n-1);
}
}
public int f(int n){
if(n==0){
return 1;
}else if(n==1){
return 4;
}else{
return 2*f(n-1)+f(n-2);
}
}
public int Fibonacci(int n){
if(n==0){
return 1;
}
else if(n==1){
return 1;
}else{
return Fibonacci(n-2)+Fibonacci(n-1);
}
}
}
13.权限修饰符
14.构造器+重载
Public Person()+{}
package Easywork;
//类和对象 调用方法 属性
public class CircleTest{
public static void main(String[] args){
PassObject a1=new PassObject();
Circle a2=new Circle();
a1.PrintAreas(a2, 6);
}
}
class Circle{
double radius;
public double findArea(double a){
double Area=a*a*Math.PI;
return Area;
}
}
class PassObject{
public void PrintAreas(Circle c,int time){
System.out.println("Radius"+"\t\t"+"Area");
for(double i=0;i<time;i++){
double Area=c.findArea(i);
System.out.println(i+"\t\t"+Area);
}
System.out.println("\n");
System.out.println(" now radius is:"+time);
}
}
15.JavaBean
元素
构造器
方法
16.UML类图
17.this.name=n;
18.package+import;
package Easywork;
//100以内所有素数
public class AllSuIn1001 {
public static void main(String[] args){
System.out.println("1");
//设定flag作为是否除尽的标志!
boolean isFlag=true;
for(int i=2;i<=100;i++)
{
for(int j=2;j<=i-1;j++)
{
if(i%j==0)
{isFlag=false;
//打断改进!!!!!!!!!!!
break; }
}
if(isFlag ==true)
{System.out.println(i);}
//重置flag
isFlag=true; }
}
}
最后是两个关于类和对象的调用,综合代码
1.三角形求面积
类
package TriAngleTest;
public class TriAngle {
private double base,height;
public TriAngle(double n,double m){
base=n;
height=m;
}
public void findArea(){
double Area=(base*height)/2;
System.out.println(Area);
}
}
类+对象
package TriAngleTest;
public class TriAngleTest {
public static void main(String args[]){
TriAngle a=new TriAngle(4,4);
a.findArea();
}
}
2.账户和顾客 AccoountAndCustomer
类:账户 Accoount
package AccoountAndCustomer;
public class Account {
private int id;
private double balance;
private double annuallnterestRate;
public Account(int id,double balance,double annuallnterestRate){
this.id=id;
this.balance=balance;
this.annuallnterestRate=annuallnterestRate;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public double getAnnuallnterestRate() {
return annuallnterestRate;
}
public void setAnnuallnterestRate(double annuallnterestRate) {
this.annuallnterestRate = annuallnterestRate;
}
public void withdraw(double amount){
if(this.balance-amount<0){
System.out.println("没钱了,穷逼!");
}else
{this.balance-=amount;
System.out.println("成功取出:"+amount);}
}
public void deposit(double amount){
this.balance+=amount;
System.out.println("成功存入:"+amount);
}
}
类:用户 Customer
package AccoountAndCustomer;
public class Customer {
private String firstname;
private String lastname;
private Account account;
public Customer(String f,String l){
this.firstname=f;
this.lastname=l;
}
public String getFirstname() {
return firstname;
}
public String getLastname() {
return lastname;
}
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
}
对象:调用
package AccoountAndCustomer;
public class test1 {
public static void main(String[] args){
Customer a=new Customer("Jane","Smith");
Account b=new Account(1000,2000,0.00123);
a.setAccount(b);
b.deposit(100);
b.withdraw(960);
b.withdraw(2000);
String c="Customer ["+a.getFirstname()+","+a.getLastname()+"]"+" has a account:";
String d="id is "+b.getId()+", "+"annuallnterestrate is "+b.getAnnuallnterestRate()*100+", balance is"+b.getBalance();
System.out.println(c+d);
}
}
唉,最后说一说,不到最后关节,还是喜欢拖延时间。
差的太多了,必须要加倍努力。
我不想再做错选择了。