-
java数组最大下标_【Java视频教程】day09-面向对象
2020-12-01 21:42:42面向对象介绍面向对象引入需求:求数组{1,2,3,4,8,7,6,5}的最大值; public static void main(String[] args) { // 需求:求数组{1,2,3,4,8,7,6,5}的最大值; /* * 解决问题的思路: 1、明确需求:搞清楚、...面向对象介绍
- 面向对象引入
需求:求数组{1,2,3,4,8,7,6,5}的最大值;
public static void main(String[] args) { // 需求:求数组{1,2,3,4,8,7,6,5}的最大值; /* * 解决问题的思路: 1、明确需求:搞清楚、确认清楚,到底要我们做什么事; 2、需求分析:如何实现需求(这个事情到底该怎么做); * a:创建一个数组,把需求中的数据保存到数组中; b:定义一个int型变量max,表示最大的值; * c:将数组中0下标的数据赋值该上一步的变量,表示默认0下标数据是最大值; d:从1下标开始遍历数组,拿到数组中每一个数据,和变量max的值比较; * 如果变量max中的数据比数组某个下标的数据小,就把该下标的数据赋值给变量max; e:循环结束,变量max中就是要求的最大值 * 3、编码实现:具体开始做事情; 4、测试:执行代码,看看事情到底有没有做成、有没有问题; */ // a:创建一个数组,把需求中的数据保存到数组中; int[] arr = new int[] {11,2,3,4,8,7,6,5}; // b:定义一个int型变量max,表示最大的值; int max; // c:将数组中0下标的数据赋值该上一步的变量,表示默认0下标数据是最大值; max = arr[0]; // d:从1下标开始遍历数组,拿到数组中每一个数据,和变量max的值比较; for (int i = 1; i < arr.length; i++) { // 如果变量max中的数据比数组某个下标的数据小,就把该下标的数据赋值给变量max; if(max < arr[i]) { max = arr[i]; } } // e:循环结束,变量max中就是要求的最大值 System.out.println("数组中最大值是:" + max); }
随着时间往后发展,可能在一个类中多次需要用到求数组最大值的功能。
如果每一次出现数组求最大值的功能,都像上面一样在写一遍代码,就很麻烦,而且代码复用性差,后期维护就难;
为了解决这个问题,我们可以使用函数来实现:
需求:有可能在不同的程序中都出现这个功能:求数组的最大值;
思考:如果可以将函数抽取出来,放到某一个地方,然后在提供一种方法,让所有需要使用这个函数的地方都可以调用这个函数,就能解决在不同的类中出现相同函数代码的问题;
因为函数是定义在类中的独立代码,所以要抽出来,也只能放到某一个类中;
问题:一个类中不能直接使用其他类的函数;如何解决这个问题?
解决办法:Java中通过 类名.函数名(实参) 的方式,可以调用其他类中的函数;
本类中:
方法放在了Tools.java这个类中;
在其他类中要想调用,应该这么写:
Tools.arrayMax(具体的数组);
像最后这种方式,就使用了面向对象的思想;
https://www.zhihu.com/video/1065593352904314880面向过程
- 什么是过程:
过程就是做一件事情的先后经过;
生活中的过程:
泡面:1、买面;2、烧开水;3、拆包装,把面放到开水中,加入调料,盖上;4、吃面;
- 程序的过程:
java中的过程,程序执行的先后经过,先执行哪行,后执行哪行;
- 什么是面向过程:
就是一种解决问题的思想;
使用这种思想解决问题,我们关心的是事情中有哪几步组成, 然后一步步实现;
使用面向过程写程序,我们首先要分析需求由那些功能组成,然后写函数实现各个功能,最后根据需求依次调用各个函数;
在这个过程中,开发者需要参与到实现的每一步中,就是劳动者;
前面几天都是按照面向过程的思想写程序;
面向过程的好处:在需求简单的时候,程序简单明了,结构清晰;
弊端:在需求复杂的时候,就会非常麻烦,开发和维护都很困难;
面向对象
- 什么是对象:
指的是生活中实际存在的事物;
- 生活中的对象:
冰箱;被子;钱;电脑;手机;椅子;桌子;地板;电灯;空气;雾霾;地球;太阳;……
- 什么是面向对象:
也是一种解决问题的思想;
使用这种思想解决问题,我们关心的是事情中有那些参与者;
使用这种思想写程序,首先分析需求有那些功能,然后找有没有已经实现好功能的类,
如果有,就直接拿来,创建它的对象,通过对象调用功能;
如果没有,就需要自己写一个类,然后在类中书写实现功能的函数【面向过程】,然后创建这个类的对象,通过对象调用功能;
面向对象的思想,更符合我们现实生活情况,也更适合开发复杂的功能;
在面向过程中,程序的基本单位是函数;面向对象,程序的基本组成就是类;
https://www.zhihu.com/video/1065593911182999553类与对象
- 类
- 类的概念
类:表示一类具有共同属性和行为的事物,是一种抽象的概念。
例如,生活中我们经常说的一个词,“电话”,指的就是所有具有打电话功能的东西,而不是指代具体某一部电话;
- 类的写法
在Java中采用class关键字定义类。定义类的格式:
修饰符 class 类名{ 类中的内容 }
修饰符:public、default(默认的)、private、static(内部类),如果省略不写,那就是默认的修饰符(default)。
类名:必须符合标识符的定义语法要求,同时还要满足如果是多个单词每个单词首字母大写。
类中的内容:主要根据类的描述信息进行具体的书写。后面详细讲解。
- 类的成员
一个类可以表示同一类事物的共有属性和功能;
事物的属性使用类中的变量表示,事物的功能使用类中的函数表示;
例如,创建一个类表示人:
class Person{ 年龄; 性别; 姓名; 地址; …… 吃饭 睡觉 说话 …… }
https://www.zhihu.com/video/1065594261700911104对象
- 对象的概念
在现实生活中,对象指的是实际存在的事物;
在Java中,对象指的是在堆内存中开辟的一块空间;例如数组就是一个对象;
对象都是根据类创建出来的;
- 对象的创建
Java中对象的创建,有五种方式:
- 使用new关键字创建;
- 使用使用Class类的newInstance方法
- 使用Constructor类的newInstance方法
- 使用clone方法
- 使用反序列化
其中,最常用、最简单的方式,就是使用new关键字创建对象;
格式:
- 创建对象的方式:
new 类名();
对象的使用
- 通过对象名使用:
https://www.zhihu.com/video/1065594851201978368类和对象的关系
类是抽象的概念,表示的是同一类事物共同的属性和行为;
事物的属性使用类中的成员变量表示,事物的行为使用类中的函数表示;
对象是根据类的描述在堆内存中开辟的一块空间,表示的是一个具体的事物;
对象是根据类创建的,先有类,后有对象。类是抽象的,对象是具体的;
https://www.zhihu.com/video/1065594978910318592面向对象练习:
使用Java代码描述 猫抓老鼠的场景;
猫的名字叫汤姆,老鼠的名字叫杰瑞;
具体的场景输出应该是:
汤姆看见杰瑞在偷吃奶酪;
汤姆追杰瑞,杰瑞逃跑;
汤姆抓住杰瑞,杰瑞叫:啊,要死啦!使用面向对象思想解决问题,
- 第一步:分析需求,找到对象;
找对象的方法:名词提炼法;就是观察需求描述的文字,找到里面的名词;名词表示的就是实际的事物,也就是对象;
分析可知,这个例子中,有三个对象:猫;老鼠;奶酪;
因为奶酪不参与其他活动,所以为了简单,这里就用一个字符串表示奶酪;
所以需要创建两个类,分别表示猫和老鼠;
- 第二步:使用伪代码描述上面找到的对象;
描述对象的原则:只需要描述和需求有关的属性和行为;
伪代码,就是不是真实的代码;就是程序员自己写的自己能看懂的符号,例如中文……
猫{ 属性:名字; 行为: 看见(老鼠){ 老鼠的吃(“奶酪”); } 追(老鼠){ 老鼠的逃跑(); } 抓住(老鼠){ 老鼠的叫(“啊,要死啦!”); } } 老鼠{ 属性:名字; 行为:吃(奶酪){} 跑(){} 叫(叫的内容){} }
第三步:使用伪代码描述场景:
猫 t = new 猫(); 老鼠 l = new 老鼠(); t的名字 = “汤姆”; l的名字 = “杰瑞”;
t.看见(l); t.追(l); t.抓住(l);
第四步:书写代码:
表示猫的类:
/** * * Cat * 表示猫的类 * @author 快学大数据 * 2018年6月14日 上午11:51:38 */ public class Cat { String name; /** * 猫看见老鼠的功能 * @param m */ public void see(Mouse m) { System.out.print(name + "看见"); //老鼠在吃奶酪 m.eat("奶酪"); } /** * 猫追老鼠的功能 * @param m */ public void zhui(Mouse m) { System.out.println(name + "开始追"+m.name); //调用老鼠对象的方法,表示老鼠在逃跑 m.run(); } /** * 表示猫抓住老鼠的功能 * @param m */ public void catchMouse(Mouse m) { System.out.println(name + "抓住了"+m.name); //调用老鼠对象的方法,表示老鼠被抓住后的惨叫 m.say("啊,要死啦!"); } }
表示老鼠的类:
/** * * Mouse * 表示老鼠的类 * @author 快学大数据 * 2018年6月14日 上午11:52:26 */ public class Mouse { String name;//老鼠的名字 /** * 老鼠吃东西的功能 * @param food */ public void eat(String food) { System.out.println(name + "在吃" + food); } /** * 老鼠逃跑的功能 */ public void run() { System.out.println(name + "正在疯狂的逃跑……"); } /** * 老鼠叫的功能 * @param str */ public void say(String str) { System.out.println(name + "大声的说:"+str); } }
模拟场景的类:
/** * * Test * 测试猫抓老鼠的场景类 * @author 快学大数据 * 2018年6月14日 上午11:58:10 */ public class Test { public static void main(String[] args) { //1、先创建一个猫对象 Cat cat = new Cat(); //2、给这个猫起个名字 cat.name = "汤姆"; //3、创建一个老鼠对象 Mouse m = new Mouse(); //4、给这个老鼠起个名字 m.name = "杰瑞"; //调用方法,输出场景要求 cat.see(m); cat.zhui(m); cat.catchMouse(m); } }
https://www.zhihu.com/video/1065595884678664192局部变量和成员变量
- 局部位置:局部是指某个范围。例如:方法的大括号中的这些个范围,它就是一个局部范围。
- 成员位置:在定义好类之后,在类的大括号内部的范围。
局部变量没有默认值,使用之前必须先赋值;
成员变量的位置在堆内存,所以都有默认值,使用之前可以先不赋值;生命周期(内存的声明周期就是指内存的分配到回收):
- 局部变量:局部变量的内存在栈内存的方法里面,函数进栈开始分配空间;函数出栈内存被释放;
- 成员变量:成员变量在堆内存中;创建对象时分配内存;对象成为垃圾空间被回收时释放;
- 局部变量:在局部范围中定义的变量,它们全部属于局部变量,并且它的使用范围就在从定义的位置往下到范围结束。
- 成员变量:直接在类的成员位置上定义的变量。这些变量不受位置的限制,可以在任何方法中被使用。但是建议将所有的变量定义在类的最前面位置。
https://www.zhihu.com/video/1065596048357060608 -
面试:数组:最大下标距离
2016-04-07 00:02:08给定一个整形数组,找出最大下标距离j−ij-i, 当且A[i][j]和i[i][j]和i 复杂度:三次扫描,每次的复杂度O(N)O(N) 算法:{5,3,4,0,1,4,1}找出从第一个元素开始的下降序列{5,3,0} i=3,j=6, j从尾部扫描 初始化,i=3, j...- 给定一个整形数组,找出最大下标距离j−i, 当且A[i]<A[j]和i<j
复杂度:三次扫描,每次的复杂度O(N)
算法:{5,3,4,0,1,4,1}
- 找出从第一个元素开始的下降序列{5,3,0}
- i=3,j=6, j从尾部扫描
- 初始化,i=3, j=6, A[i]=0
//HelloDate.java import java.util.*; public class MyDemo{ public int maxIndexDistance(int[] A){ if(A==null || A.length<2) return 0; boolean inDescSeq[]=new boolean[A.length]; int min=A[0], n=A.length; inDescSeq [0]=true; for(int i=1;i<n;i++){ if(A[i]<min){ //下降序列的标记 inDescSeq[i]=true; min=A[i]; } } int maxDist=0,i=n-1,j=n-1; while(i>=0){ if(inDescSeq[i]==false){ i--; //倒叙找到下一个下降序列 continue; } while((A[j]<=A[i])&& (j>i)) j--; //从后往前移动,直至找到符合的元素 if((j-i)>maxDist){ maxDist=j-i; } i--; } return maxDist; } public static void main(String[] args) { MyDemo demo=new MyDemo(); int[] test={5,2,4,0,1,4,1}; int result=demo.maxIndexDistance(test); System.out.println(result); } }
c++
// // main.cpp // testProject // // Created by 健 米 on 16-4-25. // Copyright (c) 2016年 __MyCompanyName__. All rights reserved. // #include <iostream> #include <vector> #include <map> #include <string> #include <algorithm> using namespace std; class Solution{ public: int maxIndexDistance(int A[],int length){ if(length<2) return 0; bool inDescSeq[length]; int min=A[0],n=length; inDescSeq[0]=true; for(int i=1;i<n;i++){ if(A[i]<min){ //标记下降序列 inDescSeq[i]=true; min=A[i]; } } int maxDist=0,i=n-1,j=n-1; while(i>=0){ if(inDescSeq[i]==false){ i--; continue; } while((A[j]<=A[i]) && (j>i)) j--; if((j-i) > maxDist) maxDist=j-i; i--; } return maxDist; } }; int main (int argc, const char * argv[]) { Solution s; int test[]={5,2,4,0,1,4,1}; int length=sizeof(test)/sizeof(int); int res=s.maxIndexDistance(test,length); cout<<res<<endl; }
- vector
// // main.cpp // testProject // // Created by 健 米 on 16-4-25. // Copyright (c) 2016年 __MyCompanyName__. All rights reserved. // #include <iostream> #include <vector> #include <map> #include <string> #include <algorithm> using namespace std; class Solution{ public: int maxIndexDistance(vector<int> &nums){ int length = nums.size(); if(length<2) return 0; bool inDescSeq[length]; int min=nums[0],n=length; inDescSeq[0]=true; for(int i=1;i<n;i++){ if(nums[i]<min){ //标记下降序列 inDescSeq[i]=true; min=nums[i]; } } int maxDist=0,i=n-1,j=n-1; while(i>=0){ if(inDescSeq[i]==false){ i--; continue; } while((nums[j]<=nums[i]) && (j>i)) j--; if((j-i) > maxDist) maxDist=j-i; i--; } return maxDist; } }; int main (int argc, const char * argv[]) { Solution s; vector<int> test; int n,t; cin >> n; while(n--) { cin>>t; test.push_back(t); } // int length=test.size(); int res=s.maxIndexDistance(test); cout<<res<<endl; }
-
java数组最大下标_java打卡12 数组的选择排序(找到最大的数排在第零位,找到第二大的排在第一位,以此类推).....
2020-12-26 10:50:36//选择排序 public class HomeWork2 { public static void main(String[] args) { int[] arr = {1, 3, 2, 4, 9, 5, 67, 7, 5, 6}; //对数组重新排序 ... //遍历数组 for (int i = 0; i < a...//选择排序 public class HomeWork2 { public static void main(String[] args) { int[] arr = {1, 3, 2, 4, 9, 5, 67, 7, 5, 6}; //对数组重新排序 exchange(arr); //遍历数组 for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } } /** * 将数组按照从大到小的顺序排列 * * @param arr int类型数组 */ public static void exchange(int[] arr) { for (int i = 0; i < arr.length; i++) { int index = i; int temp = 0; //比较最大的数将下标放在index, for (int j = i + 1; j < arr.length; j++) { if (arr[index] < arr[j]) { index = j; } } //将找到的最大的数放在当前下标里 temp = arr[i]; arr[i] = arr[index]; arr[index] = temp; } } }
-
求数组最值和下标
2017-10-09 18:02:04具体思路是 设定一个最大下标变量,通过循环让数组中的每一个值依次与数组的最大下标值进行比较。从而得出最大下标值。 public static void getMaxIndex(int[] array){ int maxIndex=0; for(int i=0在做一道java 习题时,遇到了求数组最大下标的问题,脑子里只有排序算法的思路,始终不得其解。
在网上搜索一番后得出答案。
具体思路是 设定一个最大下标变量,通过循环让数组中的每一个值依次与数组的最大下标值进行比较。从而得出最大下标值。
public static void getMaxIndex(int[] array){
int maxIndex=0;
for(int i=0;i<array.length;i++){
if(array[i]>array[maxIndex]){
maxIndex=i;
}
}
System.out.println(maxIndex);
}
-
Java:二维数组的最大值和下标
2020-09-28 17:49:49学习中遇到的一个小题目:遍历二维数组,元素中的最大值和下标。代码如下: package test; import java.util.Arrays; public class Test6 { public static void main(String[] args) { int[][] arr1 = new int... -
Java 数组
2021-02-26 21:34:40Java中定义数组的格式 【重点】4. 数组定义和使用【重点】5. 数组内存分析图【重点,难点】6. 数组和for循环7. 数组常用功能事项7.1 找出数组中指定元素的下标位置7.2 找出数组中最大值下标位置7.3 找出数组中... -
利用类Scanner接收这些数值并存入一维数组,输出最大值指定数值在该数组中的下标。
2014-05-08 10:35:591、 程序运行时提示输入若干个...(1)这组数中的最大值和最小值; (2)输出指定数值在该数组中的下标。 import java.util.*; import java.util.Scanner; publicclass scanner { publicstaticvoid main(St -
java数组找出最大和最小值的下标位置,并且用方法封装。
2020-04-25 21:17:18//找出数组中最小值的下标位置,用方法封装 class HomeWork6 { public static void main (String[]args){ int[] arr ={12, 56, 565, 13, 79, 78, 651, 87, 10, 25, }; int min = minnum(arr); System.out.... -
java 数组优化_Java数组模拟队列 + 优化
2021-02-28 10:22:39后存入的要后取出 示意图:(使用数组模拟队列示意图)数组模拟队列队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。因为队列的输出、输入是分别从... -
Java语言的数组最大可以到多少下标?如果要1000000000000000,怎么表示
2020-05-22 11:40:59Java语言的数组最大可以到多少下标?如果要1000000000000000,怎么表示 -
Java数组
2019-02-12 16:00:48Java数组数组的基本概念数组的声明初始化数组数组常用操作多维数组 数组的基本概念 数组就是最基本的一种数据结构。 相同数据类型的元素组成的集合。 元素按照线性顺序排列。所谓线性顺序就是指除第一个元素外,每... -
JAVA数组的遍历 获取最大值最小值 数组的反转 数组的查找 练习 定义方法创建指定大小的数组,并添加指定...
2020-07-04 15:56:31数组的遍历 获取最大值最小值 数组的反转 数组的查找 练习 定义方法创建指定大小的数组,并添加指定元素 拼接两个数组 感觉数组的运用还是得靠大量的实操练习才能深刻理解,像遍历取大小值和反转查下标这种系统本身... -
算法 - 求最大连续子数组和起始下标
2019-10-27 15:32:08https://github.com/GloryXu/algorithm/tree/master/src/main/java/com/redsun/algorithm/subarraysum 逛论坛无意中发现一个算法帖子,一时间也没想出更好的解决方式,搜索了下,整理下。 暴力破解 @Override ... -
Java数组的二分法查找
2020-06-14 16:46:20Java数组的二分法查找 /** * 二分法查找 * @author Donald * */ public class BisectionMethod { public static void main(String[] args) { //定义实例数组 int is[] = {0,1,2,3,4,5,6,7,8,9}; //声明... -
Java数组入门
2017-06-01 10:04:48数组的下标:数组是通过下标标识元素在数组中的位置的,下标从0开始,到数组长度-1 注意:数组中元素的类型必须与数组声明时的数据类型一致。 2、数组的声明、初始化、赋值 数组声明时,计算机 -
【java】求数组连续下标和最大值
2020-07-14 20:41:52有时候细品算法,貌似都有一些盲区,可能走过盲区就清晰明了了,实在不行就先用最笨的办法求解,然后看是否存在可以优化的点。 public static void main(String[] args){ int[] arr = {-100,-52,2,3,8,10,-60}; ... -
java求数组中最大值最小值
2017-07-18 22:22:11遍历数组元素,比较数组元素的值和默认的最大值,如果数组元素的值比默认最大值还要大,则用数组元素的值作为默认的最大值,这样遍历一遍之后就可以求出最大值了.求最小值也是同样. 这里有两种方式来求记录最大最小值: ... -
java 最大递减数_算法--求先递增后递减数组最大值的下标
2021-03-02 11:12:55题目:给定数组a, 里面的元素先严格递增后严格递减, 求最大值元素的下标.分析:看到这道题目的时候, 我脑海中首先浮现出现的是爬山坡....a[i+1]的元素, 表明开始"下坡", 则i就是所找的最大值下标. ... -
Java:<返回二维数组中最大值及下标>
2017-09-30 00:19:04这个类包括公共的数据域row、column和maxValue,二维数组中的最大值及其下标用int型的row和column以及double型的maxValue存储。编写下面的方法,返回一个二维数组中最大值的位置。public static Location ... -
JAVA 数组
2015-05-24 00:27:00一、声明数组: public class Test{ public static void main(String[] args){ int[] arr = new int[5]; //声明数组,并赋值最大有5个,下标是0-4 arr[1] = 99; //给数组的下标1赋值 arr[2... -
JAVA——编写程序找出以下数组中最大元素的下标位置及该元素的值?
2020-09-14 15:53:31编写程序找出以下数组中最大元素的下标位置及该元素的值? int arr[]={10,9,1,20,19,30,5}; 二、实现代码 package demo; public class Demo3 { public static void main(String[] args) { int aar[] = {10,9,1,20,... -
java 取出int数组中的最大值及下标,取出集合中最大值 ,最小值
2018-11-07 13:46:24//取出int数组中的最大值及下标 import java.util.Arrays; import javax.naming.InitialContext; public class Test { public static void main(String[] args) { int[] arr = { 0, 45, 14, 85, 12, 14, 7, 25... -
java数组的声明和遍历
2021-01-20 17:09:15数组中的所有的元素都是同一个类型,数组一当声明,长度都不可改变,下标从0开始,最大为length-1。 声明数组 一维数组 public class GetArray{ public static void main(String[] args){ //创建数组 -
Java输出数组中的最大值及其对应下标
2020-07-03 12:50:47import java.util.Scanner; public class MaximumAndLowerMark { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int arr[] = new int[10]; for (int i = 0; i < ... -
java 数组选择排序的推理过程
2020-04-26 23:00:20数组的推理过程 找出数组中最大值,和下标为0的元素互换位置 int[] arr = {1, 3, 5, 7, 9, 2, 4, 6, 8, 10}; /* * 1. 找出数组中的最大值下标位置 */ ... -
Java对一个一维数组动态初始化,求数组的最大值和最大值下标
2020-03-05 16:02:17package text4; public class demo { public static void main(String[] args) { int[] arr = new int[4]; arr[0] = 5;... System.out.println("最大值為:...动态初始化:只指定数组的长度,有系统为数组赋初始值
-
java验证码制作思路_java制作简单验证码功能
-
2021年健身服务行业深度报告
-
java骰子_在Java中掷骰子分配:调用方法
-
QT编程思想【C++,基于QT 6】
-
数据库连接工具包,项目导入jar包即可使用
-
自动化测试Python3+Selenium3+Unittest
-
顺风车领导者嘀嗒出行,享共享出行红利.pdf
-
组织工程化个性化人工喉修复喉的研究
-
java验证用户名和密码_Java登录页面实时验证用户名密码和动态验证码
-
readelf_windows.rar
-
长安大学2015年大地测量复试(复试真题).docx
-
java网站开发ssh实例_Java Web开发 SSH配置文件案例详解(eclipse开发自存)
-
C/C++反汇编解密
-
2021年 系统架构设计师 系列课
-
MySQL 设计基础(数据库概论、初探)
-
3D聚乳酸-乙醇酸共聚物支架治疗脊髓损伤,
-
MySQL Router 实现高可用、负载均衡、读写分离
-
MySQL 存储过程(创建海量数据实验环境)
-
java 正则表达式 多行模式_正则表达式的多行模式与单行模式
-
java struts2 登录验证_java struts2入门学习实例--使用struts进行验证