Java第三次作业

这篇博客涵盖了Java编程的基础知识,包括输入输出、数组操作、字符串处理、数学运算和算法应用。示例代码展示了如何计算平均成绩、查找元素、排序数组、处理棋盘问题、生成随机数、去重和数组扩容。还讨论了字符串对象的特性、数组的定义和访问方式,以及值传递和引用传递的区别。
摘要由CSDN通过智能技术生成

作业1:
    请输入10位同学的java成绩,
    1、求平均成绩,最高成绩、最低成绩

import java.util.Scanner;
public class Cheng {
	public static void main(String[] args) {
		Scanner iu=new Scanner(System.in);
		int[] arr=new int[10];
		System.out.println("请输入10个同学的成绩:");
		for(int i=0;i<arr.length;i++) {
			arr[i]=iu.nextInt();
		}
		System.out.println("平均成绩为:"+Avg(arr));
		System.out.println("最高成绩为:"+maxscore(arr));
		System.out.println("最低成绩为:"+minscore(arr));
}
	public static int Avg(int[] arr) {
		int avg=0;
		int sum=0;
		for(int i=0;i<arr.length;i++) {
			sum+=arr[i];
		}
		avg=sum/arr.length;
		return avg;
	}
	public static int maxscore(int[] arr) {
		int max=0;
		for(int i=0;i<arr.length;i++) {
			if(arr[i]>max) {
				max=arr[i];
			}
		}
		return max;
	}
	public static int minscore(int[] arr) {
		int min=0;
		for(int i=0;i<arr.length;i++) {
			if(arr[i]<min) {
				min=arr[i];
			}
		}
		return min;
	}
}

结果为:

请输入10个同学的成绩:
12 5 3 4 6 7 23 4 6 0
平均成绩为:7
最高成绩为:23
最低成绩为:0


    2、对10的成绩按照从低到高的顺序排列(选做)

public static void sort(int[] arr){
		int temp;
		for(int i=0;i<arr.length-1;i++) {
			for(int j=0;j<arr.length-i-1;j++) {
				if(arr[j]>arr[j+1]) {
					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]+" ");
		}
	}

结果为:

传入:12 5 6 4 3 2 8 65 45 23
排序后:2 3 4 5 6 8 12 23 45 65 

作业2:
    给定一个数组,判断某个元素是否在该数组中

import java.util.Scanner;
public class Cheng {
	public static void main(String[] args) {
		Scanner iu=new Scanner(System.in);
		int[] arr= {3,2,5,6,7,9,8};
		System.out.print("请输入一个数:");
		pan(arr);
}
	public static void pan(int[] arr) {
		Scanner iu=new Scanner(System.in);
		boolean flag=true;
		int n=iu.nextInt();
		for(int i=0;i<arr.length;i++) {
			if(arr[i]==n) {
				flag=false;
				System.out.println("存在");
				break;
			}else {
				System.out.println("不存在");
				break;
			}
		}
	}
}

结果为:

请输入一个数:10
不存在


作业3:

    给定一个数组,大小为10,输入十个同学的成绩,求这些成绩的总分数
    某一天转入2个新同学,请再次求12个同学的平均成绩(尝试着使用扩容的形式做)

import java.util.Scanner;
public class Cheng {
	public static void main(String[] args) {
		Scanner iu=new Scanner(System.in);
		int[] oldarr=new int[10];
		int[] arrplus=new int[12];
		System.out.println("请输入10个同学的成绩:");
		for(int i=0;i<oldarr.length;i++) {
			oldarr[i]=iu.nextInt();
		}
		System.out.println("数组增加前总成绩为:"+qwe(oldarr));
		for(int i=0;i<oldarr.length;i++) {
			arrplus[i]=oldarr[i]; //将原数组的元素复制到新数组
		}
		System.out.println("请输入需要添加同学的成绩:");
		int a=iu.nextInt();
		int b=iu.nextInt();
		arrplus[arrplus.length-2]=a;
		arrplus[arrplus.length-1]=b;
		System.out.println("数组增加后总成绩为:"+qwe(arrplus));
}
	public static int qwe(int[] arr) {
		int sum=0;
		for(int i=0;i<arr.length;i++) {
			sum+=arr[i];
		}
		return sum;
	}
	}

结果为:

请输入10个同学的成绩:
1 1 1 1 1 1 1 1 1 1
数组增加前总成绩为:10
请输入需要添加同学的成绩:
10 20
数组增加后总成绩为:40

作业4:有一堆硬币,每次只能拿一个或者两个,求最少多少次可以拿完硬币
    {10, 8, 5, 3, 27, 99}
    

public class Cheng {
	public static void main(String[] args) {
        int[] arr = {10, 8, 5, 3, 27, 99};
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += wu(arr[i]);
        }
        System.out.println("最少" + sum + "次可以拿完硬币");
    }
    public static int wu(int n) {
        if (n == 1) {
            return 1;
        }
        if (n == 2) {
            return 1;
        }
        if (n % 2 == 0) {
            return n / 2;
        } else {
            return (n+1)/2;
        }
    }
}

结果为:

最少78次可以拿完硬币

作业5:将数组中的重复数据去重

import java.util.ArrayList;
import java.util.List;
public class Cheng {
	public static void main(String[] args) {
        int[] arr = {10, 8, 5, 3, 27, 99,5,8};
        List list = new ArrayList();
    	for(int x=0;x<arr.length;x++){
    		if(!list.contains(arr[x])){
    			list.add(arr[x]);
    		}
    	} 
        System.out.println(list);
    }
}

去重后:

[10, 8, 5, 3, 27, 99]


作业6:如何将10个0-10随机存入数组中

import java.util.Random;
public class Cheng {
	public static void main(String[] args) {
       int[] arr=new int[10];
       Random r=new Random();
       for(int i=0;i<arr.length;i++) {
    	   arr[i]=r.nextInt(11);
       }
       System.out.print("存取后为:");
       for(int i:arr) {
    	   System.out.print(i+" ");
       }
}
}

结果:

存取后为:4 5 10 1 1 0 7 10 9 1 

作业7:存在整数数组nums,将该数组中的所有偶数元素排列到奇数元素前

import java.util.Arrays;
public class Test {
    public static void main(String[] args) {
        int[] arr={1,3,2,4,5,6,8};
        int left = 0;
        int right = arr.length-1;
        while (left < right){
            // 该循环结束, left 就指向了一个奇数
            while (left < right && arr[left] % 2 == 0){
                left++;
            }
            // 该循环结束, right 就指向了一个偶数
            while (left < right && arr[right] % 2 != 0){
                right--;
            }
            //交换两个位置的元素
            int tmp = arr[right];
            arr[right] = arr[left];
            arr[left] = tmp;
        }
        System.out.println(Arrays.toString(arr));
    }
}

结果为:

[8, 6, 2, 4, 5, 3, 1]

作业8:
    执行下列程序的输出结果为 (D)
    public class Test {
     public static void main(String[] args) {
     String s1 = "HelloWorld";
     String s2 = new String("HelloWorld");
     if (s1 == s2) {
     System.out.println("s1 == s2");
     } else {
     System.out.println("s1 != s2");
     }
     if (s1.equals(s2)) {
     System.out.println("s1 equals s2");
     } else {
     System.out.println("s1 not equals s2");
     }
     }
     }

    A. s1 == s2
        s1 not equals s2
    B. s1 == s2
        s1 equals s2
    C. s1 != s2
        s1 not equals s2
    D. s1 != s2
        s1 equals s2


作业:
    某个人进入如下一个棋盘中,要求从左上角开始走,
    最后从右下角出来(要求只能前进,不能后退),
    问题:共有多少种走法?
    
    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

    0 0 0 0 0 0 0 0

import java.util.*;
public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入行数:");
        int x = sc.nextInt();
        System.out.println("请输入列数:");
        int y = sc.nextInt();
        int count = run(x, y);
        System.out.println("方法总共有" + count + "种");

    }
    public static int run(int x, int y) {
        int count = 0;
        while (x > 0 && y > 0) {
            if (x == 1) {
                count++;
                x = 0;
            } else if (y == 1) {
                count++;
                y = 0;
            } else {
                count = run(x - 1, y) + run(x, y - 1);
                break;
            }
        }
        return count;
    }
}

结果为:

请输入行数:3
请输入列数:3
方法总共有6种

Java中几个常见的内置对象

Scanner类、Math类、Random类、String类(字符串对象)
1.Math类:

数学类, java提供用来处理和计算复杂数学运算的类,Math

Math类中常见的方法:

PI        // 圆周率, 属性
E        // 自然常数,属性
abs(num)    // 返回num值的绝对值
cbrt(a)    // 开立方根
ceil(a)    // 向上取整 
floor(a)    // 向下取整
pow(a, b)    // a^b 幂次方
sqrt(a)    // a的平方根
random()    // 获取一个[0, 1)的随机小数 

2.Random类

随机数:计算机中随机数都是伪随机数
Math.random()    // 获取一个[0, 1)的随机小数 

public class Three {
    public static void main(String[] args) {
        //获取一个0-100的随机数
        int a= (int) (Math.random()*100);
        System.out.println(a);
    }
}


java.util.Random使用Random类需要导包

Random r = new Random([long seed]);

        r.nextInt()
        r.nextDouble()
        ……

import java.util.Random;
public class Three {
    public static void main(String[] args) {
        //获取一个0-100的随机数
        Random r=new Random();
        int a=r.nextInt(100);
        System.out.println(a);
    }
}

3.Scanner类

Scanner 是标准输入流,IO流

  • next()        // 通过空格获取字符串(单词),也可回车
  • nextInt()
  • nextDouble()
  • hasNext()
import java.util.Scanner;
public class Three {
    public static void main(String[] args) {
        Scanner iu=new Scanner(System.in);//创建一个Scanner对象iu
        int a=iu.nextInt();//输入一个整数
        String b=iu.next();//输入一个字符串
        double c=iu.nextDouble();//输入一个双精度浮点数
        boolean d=iu.hasNext();//输入一个布尔值
    }
}

4.String类

字符串对象(String):
    java.lang.String

    字符串:字符连在了一起,形成了字符串。人的肉眼可以识别分符号
    在Java中,一般表现为"",引号的内部内容就是字符串
    在java中,字符串是引用数据类型(对象)

字符串是一个常量,是一种不可变的数据类型

定义字符串:

第一种定义方式:
      String s = "this is a woman!";    // 定义了一个字符串

第二种定义方式
      new String()        获取字符串
      String ss = new String();    // 等价于 String ss = "";

      String sss = new String("王家豪是个大帅哥");    
    // 等价于 String sss = "王家豪是个大帅哥";

 

常见的字符串方法:
    |-- charAt(i)                // 获取下标对应的字符
    |-- length()                // 返回字符串的长度
    |-- codePointAt(i)            // 获取下标对应的字符的Unicode值

String s="123456";
for (int i=0;i<s.length();i++){//字符串的长度
System.out.print(s.charAt(i));//获取字符串下标对应的字符
}
System.out.println();
System.out.println(s.codePointAt(0));//获取下标对应字符的unicode

    |-- concat(str)                // 拼接字符串
    |-- contains(str)            // 查找当前字符串是否存在
    |-- static copyValueOf(char[])        //返回指定数组中表示该字符序列的字符串
    |-- endsWith(suffix)            //判断字符串是否以指定字符串结尾
    |-- startsWith(prefix)        //判断字符串是否以指定字符串开头
    |-- equals(str)            //判断两个字符串是否相等

        String a="123";
        String b="45";
        String c=a.concat(b);//拼接字符串
        System.out.println(a.contains("1"));//查找字符在字符串中是否存在
        System.out.println(c.endsWith("1"));//判断字符串是否以1结尾
        System.out.println(c.startsWith("2"));//判断字符串是否以1开头
        System.out.println(a.equals(b));//判断两个字符串的值是否相等


    |-- equalsIgnoreCase(str)        //将字符串与指定的对象比较,不考虑大小写。
    |-- getByte()            //得到一个操作系统默认的编码格式的字节数组
    |-- indexOf(str)            //返回子字符串下标
    |-- lastIndexOf(str)            //从尾部搜索,返回字符串下标
    |-- isEmpty()             //判断的是值的长度
    |-- replace(oldstr, newstr)        //替换字符串的子串,要写在输出语句
    |-- static join(标识符, 字符串数组)    //数组转字符串
    |-- split(regex)            //分割字符串,字符串转数组 
    |-- substring(index)            //截取字符串
    |-- substring(start, end)        //靠字符串下标截取字符串

String a="a,b,c,d,e";
System.out.println(a.replace("abc","123"));//替换字符串
System.out.println(a.split(",",1));分割字符串
System.out.println(a.substring(0,2));//截取字符串


    |-- toCharArray()             //把字符串变成字符数组
    |-- toLowerCase()             //小写字母
    |-- toUpperCase()             //大写字母
    |-- trim()                 //移除字符串首尾空格
    |-- valueOf()            //是静态方法,可以把任意基本类型或引用类型转换为字符串

String a=" abc ";
System.out.println(a.trim());//移除首位空格
System.out.println(a.toUpperCase());//大写字母
System.out.println(a.toCharArray());//把字符串变成字符数组

注意:字符串不要使用等于符号判断是否相等
    在java中 == 判断的值的,不能用来判断字符串
    因为字符串的创建方式有多种,不同的创建方式,地址(指针)可能不一样

    
    基本数据类型都是可以使用 == 判断是否相等
    字符串不能还是用 == 判断是否相等

    字符串中 == 判断的字符串的地址
    equals判断是字符串的值;

Java中数组的使用

数组:
什么是数组(Array):
    数组是一种连续内存、大小固定的线性表,是一种数据结构,用来解决大量的存储问题。

为什么学习数组:数组可以解决大量数据存储问题
容器(collection):容器一般是一种数据结构,是用来解决多个数据保存和计算的容器
    线性表:
        数组
        栈
        队列
        链表
    哈希表:    
    树:    
    图:

数组的特点:
    1、大小固定
    2、连续内存地址
    3、存储的数据类型固定
    4、数组是保存在堆内存中!!!因此数组是对象!!!
    
Java中如何定义数组
    // 第一种定义方式
    数据类型[] 变量名称 = new 数据类型[size];

int[] a=new int[1];

    // 第二种定义方式
    数据类型[] 变量名称 = new 数据类型[]{值1, 值2……};

int[] a=new int[]{1};

    // 第三种定义方式
    数据类型[] 变量名称 = {值1, 值2……};

int[] a={1,2,3,4,5};

数组的长度(元素的个数):
    数组对象.length        // 属性


访问数组元素(element):
    通过下标来访问,注意:在编程中,99%情况下,下标都是从0开始

    数组对象[下标]        // 通过下标来访问元素的个数

修改元素的数值:
    数组对象[下标] = 新值

遍历数组:
    制作一个索引

for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i]);
    }
int i = 0;
    while(i < arr.length) {
        System.out.println(arr[i]);
        i++;
    }

    foreach    // 循环加强,是jdk5的新特性,是一种迭代容器操作
    for (数据类型 临时变量: 可迭代对象) {
        System.out.println(临时变量);
    }

 for (int item: arr) {
        System.out.println(item);
    }

值传递和引用传递的区别:


值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。


引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南孚程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值