作业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);
}
值传递和引用传递的区别:
值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。
引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。