关于java数组的问题,怎么在已经定义了的有顺序的数组中添加元素;

请问:现有一个有序的数组,现在想要将一个元素插入到该数组中去,还要保证该数组是有序的;
因为数组长度一旦确定就不能改变,但是我想知道,有没有一种方法可以增加数组的长度并且按照合法的顺序添加元素。length变为length+1;
![图片说明](https://img-ask.csdn.net/upload/201609/29/1475130773_864223.jpg)图片说明

6个回答

图片说明

不建议对数组进行添加和删除操作,效率很低。正常情况下没有这样搞的

sinat_36016725
Xgf-943 回复efficiency_shang: 好的,谢谢。就然如此那就不深究了
3 年多之前 回复
u013076997
efficiency_shang 回复Xgf-943: 数组应该一旦被创建长度是不能变的,可以用List,Set等取代数组进行相应的操作
3 年多之前 回复
sinat_36016725
Xgf-943 前面的利用折半查找找到该元素的应该插入的位置我都找到了,到那时我要怎么才能把这个元素插入在这个位置,并且将原来的位置上面的元素往后移动一位,length+1?
3 年多之前 回复

数组元素添加完成后“效果应该是:[11,22,33,44,56,78,99,100,102]”

sinat_36016725
Xgf-943 [11,22,33,44,56,58,78,99,100,102]
3 年多之前 回复

使用Linklist,也就是链表,直接插入就行;链表长度可以随意更改,适用于,插入删除操作多的情况(效率比数组高很多,不会有空间浪费),定长数组适用于查找多的情况,效率比链表高

sinat_36016725
Xgf-943 好吧,我只是在自学中,岳傲这个问题,我就问问有没有解决的必要,除了使用List的增删改查方法外,既然大家都不建议继续深究,那就算了,还是谢谢。
3 年多之前 回复

有序的数组 和List有什么区别呢

ShanYu1198124123
ShanYu1198124123 List按对象进入的顺序保存对象,不做排序或编辑操作;是有序的,这个有序指的就是存放的顺序和取出的顺序是一致的,并不是数据进行排序
3 年多之前 回复
ShanYu1198124123
ShanYu1198124123 List集合可以存储和操作数目不固定的一组数据。且只能存放引用类型的的数据,不能存放基本数据类型.
3 年多之前 回复
ShanYu1198124123
ShanYu1198124123 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型);
3 年多之前 回复

public class kk {

public static void main(String[] args) {
    int[] hu={11,22,33,44,55,66,77,88};
    int i;
    ArrayList<String> xinde= new ArrayList<String>();
    xinde=insert(hu,47);
    System.out.println("旧数组"+hu.length);
    System.out.println("新数组"+xinde.size());
    for(i=0;i<xinde.size();i++){
        System.out.print(xinde.get(i)+",");
    }
}

public static ArrayList<String> insert(int[] arr, int key){
    ArrayList<String> jiude = new ArrayList<String>();
    int i;
    int j;
    for (i = 0; arr[i] < key; i++) {
        jiude.add(String.valueOf(arr[i]));
    }
    jiude.add(String.valueOf(key));
    for (j = i; j < arr.length; j++) {
        jiude.add(String.valueOf(arr[j]));
    }
    return jiude;
}

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java treemap集合类,自定义比较器怎样实现逆字典顺序输出的?
代码是: import java.util.*; public class Example21 { // 创建TreeMap测试类 public static void main(String[] args) { TreeMap tm = new TreeMap(new MyComparator());// 传入一个自定义比较器 tm.put("1", "Jack"); // 向集合存入学生的学号和姓名 tm.put("2", "Rose"); tm.put("3", "Lucy"); Set keySet = tm.keySet(); // 获取键的集合 Iterator it = keySet.iterator(); // 获得迭代器对象 while (it.hasNext()) { Object key = it.next(); // 获得一个键 Object value = tm.get(key); // 获得键对应的值 System.out.println(key + ":" + value); } } } class MyComparator implements Comparator { // 自定义比较器 public int compare(Object obj1, Object obj2) {// 实现比较方法 String id1 = (String) obj1; // 将Object类型的参数强转为String类型 String id2 = (String) obj2; return id2.compareTo(id1); // 将比较之后的值返回 } } 输出结果是: 3:Lucy 2: Rose 1:Jack 当我把 return id2.compareTo(id1); 改成 return id1.compareTo(id2); 时 输出结果是这样的:1:Jack 2:Rose 3:Lucy 这是怎样实现的? 能不能把实现过程表示出来? 谢谢了,各位
用java学生成绩统计。求大神帮忙
功能:先用对话框提示输入5个同学的姓名和语数外成绩,然后提示输入数字1-5,实现下面相应的功能,在控制台显示统计结果。 (例如:输入数字1 ,则在控制台显示最高分和最低分同学的姓名和总分) 要求:建立一个学生类,有数据姓名和成绩数组,有构造方法,有计算最高分学生的方法等(具体有那些方法可根据程序功能自己设计),在主类中定义学生数组,调用学生类的方法完成对应的功能。 1) 最高分同学的姓名和总分 2) 按总分从高到低的顺序,按下面格式输出学生的姓名和总分 排名 姓名 总分 1 a 288 2 b 280 3 c 275 3) 平均分在60以下的学生姓名和人数 4) 给出提示,输入一个学生的姓名,查询这个学生的总分 5)退出程序
java自定义异常一个很奇怪的问题
这是我的一段代码 <br />class TestException8 extends Exception{}; <br /> <br />public class TestException7 { <br /> public void method() throws TestException8{ <br /> System.out.println("method()"); <br /> throw new TestException8(); <br /> } <br /> public static void main(String[] args) { <br /> TestException7 t=new TestException7(); <br /> try { <br /> t.method(); <br /> } catch (TestException8 e) { <br /> e.printStackTrace(); <br /> } <br /> } <br />} <br /> <br />输出的结果很奇怪,我反复执行,答应"method()"的顺序不同,为什么,难道不是按顺序执行吗?随机? <br />第一种情况: <br />method() <br />com.chenhuan.p12.TestException8 <br /> at com.chenhuan.p12.TestException7.method(TestException7.java:6) <br /> at com.chenhuan.p12.TestException7.main(TestException7.java:11) <br /> <br /> <br />第二种情况: <br />com.chenhuan.p12.TestException8 <br /> at com.chenhuan.p12.TestException7.method(TestException7.java:6) <br /> at com.chenhuan.p12.TestException7.main(TestException7.java:11) <br />method() <br /> <br /> <br /> <br /><br /><strong>问题补充</strong><br />调试了一下,正常情况下是第一种情况,难道eclipse有问题?
C语言数据结构顺序存储的线性表常用函数的参数传递中*P和P使用情况和一些顺序存储的线性表问题
刚学了C语言的数据结构,有一些问题不懂,或者说有一些认识不知道对不对,想知道真正的情况是怎么样的。 先看这几条语句: void union(List *La,List Lb) (1) { int La_len,Lb_len,i; ElemType e; La_len = ListLength(*La); (2) Lb_len = ListLength(Lb); (3) for(i=1;i<=Lb_len;i++) { GetElem(Lb,i,&e); if(!LocateElem(*La,e)) (4) ListInsert(La,++La_len,e); } } 再看函数原型,是我看的书上的:(L是线性表) 1. InitList(*L); 2. ClearList(*L); 3. ListInsert(*L,i,e); 4. ListDelete(*L,i,*e); 5. ListLength(L); 6. ListEmpty(L); 7. LocateElem(L,e); 8. GetElem(L,i,*e); 问题是: 1. 第一部分语句, union函数的两个参数List *La,List Lb,一个是*La,一个是Lb, 不知道为什么一个是用线性表的指针的地址 *L,一个是用 L 。 2. La_len = ListLength(*La); (2) Lb_len = ListLength(Lb); (3) !LocateElem(*La,e) (4) 和第7条原型LocateElem(L,e); (2)(3)两条语句,用的是同样的函数,一个却是指针地址,一个确实指针指向的值,对应第5条函数原型ListLength(L);是不是这个函数里面的参数既可以是*La也可以是Lb?区别是什么? (4)的语句第一个参数是*La,而原型第一个参数是L,不知道为什么一个有加*,一个没有加,有错吗,没错的话区别是什么? 3. 几个函数原型里面,前4条函数的参数是L,后4条函数参数是(*L),还有e也有这种情况,是为什么??搞不懂什么时候用加*,什么时候不用加,区别是什么 4. 顺序线性表的定义跟一个结构体差不多,里面有一个数组存储数据元素,搞不清楚结构体和线性表和数组的区别和联系 (老师教C的时候,没怎么听,后来学JAVA了C也忘记差不多了,学C的数据结构感觉熟悉又陌生,有很多不懂的地方,谢谢大家帮忙解答了)
c++ stl set 自定义类 equals 如何保证不重复
我在写作业时遇到一个问题,我自定义了一个类,然后用了一个set,set里放的是我自己写的类的指针。我希望这个set里的类指针能满足如下要求:首先满足类指针所指向类实例的某一类成员不与set中已有类指针所指向的实例的对应成员相同,其次类指针本身的内容不同。 我该如何实现?我所知道的自定义compare方法似乎是提供两个放进去的东西的先后顺序关系的比较,如何实现用自己定义的方法实现set内成员满足我所定义的不重复?然后我知道好像Java里可以通过重写equals函数,c++行吗?
求助Java算法,这两个算法问题有Java代码实现
1. 从N个元素集合里面随机抽取M个元素(M<N)。 C/C++: void randomChoose(int*data, intn, int *result, int m); Java: void randomChoose(int data[], int result[]); 说明: 1.Data是待抽取的元素集合,n是data的长度,result是抽取的结果,m是结果集的长度。 2.同一个元素不能被反复抽取。 3.每个元素被抽取到的概率必须相同。 4.不需要自己写随机函数,C版本中允许使用rand()函数,java版本中允许使用Random对象 5.算法效率尽可能高 6.必须要有代码注释和算法说明。 例如:data里面的数据是{3, 4, 9}。n = 3, m = 2。此时result的可能输出结果有{3, 4},{3, 9},{4, 9},{4,3},{9, 3},{9, 4},每种可能的输出概率相同。 2.交换链表的奇偶顺序 函数说明: swap函数交换链表第2i和第2i+1个元素(如果都有的话),并返回交换之后的链表。 示例: 交换前链表的顺序 交换后链表的顺序 1→2→3→4→5 ==> 2→1→4→3→5 1 ==> 1 (链表仅含一个元素) 1→2 ==> 2→1 ==> (链表为空) C/C++: 链表节点定义为: struct node { struct node *next; … }; struct node *swap(struct node *list); Java: 链表节点定义为: class Node { public Node next; … } Node swap(Node list) 注意点和要求如下: 0. swap函数返回新的链表指针 1. swap函数要求对节点的指针/引用进行操作(不得创建任何新的链表节点) 2. 不得使用任何库函数/API,如需使用类似功能, 请自行实现 3. 不得将链表转化为其他类型数据结构再进行交换,如数组等
java中,自定义类继承Compretor来排序,排序却出了问题,求指点
首先,我的待排序的类TieziAndImageClass中有一字段为String time,是时间来的,其格式为 yyyy-MM-dd HH:mm:ss 。要对这个类的多个实例进行排序,我就是依据这反应时间的字符串来排序的,时间旧的排前,时间新的排后,为此自定义了一个类继承了Compretor ``` public class TimeCompreter implements Comparator { public int compare(Object object1,Object object2) { TieziAndImageClass tiezi1=(TieziAndImageClass)object1; TieziAndImageClass tiezi2=(TieziAndImageClass)object2; String time1=tiezi1.tiezi.getTime(); //获取反应时间的字符串 String time2=tiezi2.tiezi.getTime(); int yearResult=-2; String year1=time1.substring(0, 3); String year2=time2.substring(0, 3); int intYear1=Integer.parseInt(year1); int intYear2=Integer.parseInt(year2); if(intYear1>intYear2) yearResult=1; else if (intYear1==intYear2) yearResult=0; else if(intYear1<intYear2) yearResult=-1; if(yearResult==1 || yearResult==-1) return yearResult; int monthResult=-2; String month1=time1.substring(5,6); String month2=time2.substring(5,6); int intMonth1=Integer.parseInt(month1); int intMonth2=Integer.parseInt(month2); if(intMonth1>intMonth2) monthResult=1; else if (intMonth1==intMonth2) monthResult=0; else if(intMonth1<intMonth2) monthResult=-1; if(monthResult==1 || monthResult==-1) return monthResult; int dayResult=-2; String day1=time1.substring(8,9); String day2=time2.substring(8,9); int intDay1=Integer.parseInt(day1); int intDay2=Integer.parseInt(day2); if(intDay1>intDay2) dayResult=1; else if (intDay1==intDay2) dayResult=0; else if(intDay1<intDay2) dayResult=-1; if(dayResult==1 || dayResult==-1) return dayResult; int hourResult=-2; String hour1=time1.substring(11,12); String hour2=time2.substring(11,12); int intHour1=Integer.parseInt(hour1); int intHour2=Integer.parseInt(hour2); if(intHour1>intHour2) hourResult=1; else if (intHour1==intHour2) hourResult=0; else if(intHour1<intHour2) hourResult=-1; if(hourResult==1 || hourResult==-1) return hourResult; int minuteResult=-2; String minute1=time1.substring(14,15); String minute2=time2.substring(14,15); int intMinute1=Integer.parseInt(minute1); int intMinute2=Integer.parseInt(minute2); if(intMinute1>intMinute2) minuteResult=1; else if (intMinute1==intMinute2) minuteResult=0; else if(intMinute1<intMinute2) minuteResult=-1; if(minuteResult==1 || minuteResult==-1) return minuteResult; int secondResult=-2; String second1=time1.substring(17,18); String second2=time2.substring(17,18); int intSecond1=Integer.parseInt(second1); int intSecond2=Integer.parseInt(second2); if(intSecond1>intSecond2) secondResult=1; else if (intSecond1==intSecond2) secondResult=0; else if(intSecond1<intSecond2) secondResult=-1; return secondResult; } } ``` 按如下方式来使用 ``` Collectios.sort(list对象,new TimeCompretor()); ``` 但是最后排序结果很乱,没能按预期的旧的排前,新的排后这样来排,实际中的是旧的有点排前也有点排到后面去了,总之排完之后的顺序混乱,求指点一下
Java 梭哈 编译出错怎么解决
import java.util.*; public class ShowHand { //定义该游戏最多支持多少个玩家 private final int PLAY_NUM = 5; //定义扑克牌的所有花色和数值, //下面四个是特殊字符,会在控制台打印出方块, 草花 , 红心 , 黑桃 private String[] types = {"\4 " , "\5 " ,"\3 " , "\6 "}; private String[] values = {"2" , "3" , "4" , "5" , "6" , "7" , "8" , "9", "10" , "J" , "Q" , "K" , "A"}; //card是一局游戏中剩下的扑克牌 ** **_private List<String> cards = new LinkedList<String>();_**** //定义所有的玩家 private String[] players = new String[PLAY_NUM]; //所有玩家手上的扑克牌 ** private List<String>[] playersCards = new List[PLAY_NUM];** /** * 初始化扑克牌,放入52张扑克牌,并且使用shuffle方法将它们按随机顺序排列 */ public void initCards() { for (int i = 0 ; i < types.length ; i++ ) { for (int j = 0; j < values.length ; j++ ) { cards.add(types[i] + values[j]); } } //随机排列 Collections.shuffle(cards); } /** * 初始化玩家,为每个玩家分派用户名 */ public void initPlayer(String... names) { if (names.length > PLAY_NUM || names.length < 2) { //校验玩家数量,此处使用异常机制更合理 System.out.println("玩家数量不对"); return ; } else { //初始化玩家用户名 for (int i = 0; i < names.length ; i++ ) { players[i] = names[i]; } } } /** * 初始化玩家手上的扑克牌,开始游戏时每个玩家手上的扑克牌为空, * 程序使用一个长度为0的LinkedList来表示。 */ public void initPlayerCards() { for (int i = 0; i < players.length ; i++ ) { if (players[i] != null && !players[i].equals("")) { playersCards[i] = new LinkedList<String>(); } } } /** * 输出全部扑克牌,该方法没有实际作用,仅用作测试 */ public void showAllCards() { for (String card : cards ) { System.out.println(card); } } /** * 派扑克牌 * @param first 最先派给谁 */ public void deliverCard(String first) { //调用ArrayUtils工具类的search方法,查询出指定元素在数组中的索引 int firstPos = ArrayUitls.search(players , first); //依次给位于该指定玩家之后的每个玩家派扑克牌 for (int i = firstPos; i < PLAY_NUM ; i ++) { if (players[i] != null) { playersCards[i].add(cards.get(0)); cards.remove(0); } } //依次给位于该指定玩家之前的每个玩家派扑克牌 for (int i = 0; i < firstPos ; i ++) { if (players[i] != null) { playersCards[i].add(cards.get(0)); cards.remove(0); } } } /** * 输出玩家手上的扑克牌 * 实现该方法时,应该控制每个玩家看不到别人的第一张牌,但此处没有增加该功能 */ public void showPlayerCards() { for (int i = 0; i < PLAY_NUM ; i++ ) { //当该玩家不为空时 if (players[i] != null) { //输出玩家 System.out.print(players[i] + " : " ); //遍历输出玩家手上的扑克牌 for (String card : playersCards[i]) { System.out.print(card + "\t"); } } System.out.print("\n"); } } public static void main(String[] args) { ShowHand sh = new ShowHand(); System.out.println(Arrays.toString(sh.types)); sh.initPlayer("电脑玩家" , "孙悟空"); sh.initCards(); sh.initPlayerCards(); //下面测试所有扑克牌,没有实际作用 sh.showAllCards(); System.out.println("---------------"); //下面从"孙悟空"开始派牌 sh.deliverCard("孙悟空"); sh.showPlayerCards(); /* 这个地方需要增加处理: 1.牌面最大的玩家下注. 2.其他玩家是否跟注? 3.游戏是否只剩一个玩家?如果是,则他胜利了。 4.如果已经是最后一张扑克牌,则需要比较剩下玩家的牌面大小. */ //再次从"电脑玩家"开始派牌 sh.deliverCard("电脑玩家"); sh.showPlayerCards(); } } import java.util.*; /** * Description: * <br/>Copyright (C), 2005-2008, Yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: * @author Yeeku.H.Lee kongyeeku@163.com * @version 1.0 */ public class ShowHand { //定义该游戏最多支持多少个玩家 private final int PLAY_NUM = 5; //定义扑克牌的所有花色和数值, //下面四个是特殊字符,会在控制台打印出方块, 草花 , 红心 , 黑桃 private String[] types = {"\4 " , "\5 " ,"\3 " , "\6 "}; private String[] values = {"2" , "3" , "4" , "5" , "6" , "7" , "8" , "9", "10" , "J" , "Q" , "K" , "A"}; //card是一局游戏中剩下的扑克牌 private List<String> cards = new LinkedList<String>(); //定义所有的玩家 private String[] players = new String[PLAY_NUM]; //所有玩家手上的扑克牌 private List<String>[] playersCards = new List[PLAY_NUM]; /** * 初始化扑克牌,放入52张扑克牌,并且使用shuffle方法将它们按随机顺序排列 */ public void initCards() { for (int i = 0 ; i < types.length ; i++ ) { for (int j = 0; j < values.length ; j++ ) { cards.add(types[i] + values[j]); } } //随机排列 Collections.shuffle(cards); } /** * 初始化玩家,为每个玩家分派用户名 */ public void initPlayer(String... names) { if (names.length > PLAY_NUM || names.length < 2) { //校验玩家数量,此处使用异常机制更合理 System.out.println("玩家数量不对"); return ; } else { //初始化玩家用户名 for (int i = 0; i < names.length ; i++ ) { players[i] = names[i]; } } } /** * 初始化玩家手上的扑克牌,开始游戏时每个玩家手上的扑克牌为空, * 程序使用一个长度为0的LinkedList来表示。 */ public void initPlayerCards() { for (int i = 0; i < players.length ; i++ ) { if (players[i] != null && !players[i].equals("")) { playersCards[i] = new LinkedList<String>(); } } } /** * 输出全部扑克牌,该方法没有实际作用,仅用作测试 */ public void showAllCards() { for (String card : cards ) { System.out.println(card); } } /** * 派扑克牌 * @param first 最先派给谁 */ public void deliverCard(String first) { //调用ArrayUtils工具类的search方法,查询出指定元素在数组中的索引 int firstPos = ArrayUitls.search(players , first); //依次给位于该指定玩家之后的每个玩家派扑克牌 for (int i = firstPos; i < PLAY_NUM ; i ++) { if (players[i] != null) { playersCards[i].add(cards.get(0)); cards.remove(0); } } //依次给位于该指定玩家之前的每个玩家派扑克牌 for (int i = 0; i < firstPos ; i ++) { if (players[i] != null) { playersCards[i].add(cards.get(0)); cards.remove(0); } } } /** * 输出玩家手上的扑克牌 * 实现该方法时,应该控制每个玩家看不到别人的第一张牌,但此处没有增加该功能 */ public void showPlayerCards() { for (int i = 0; i < PLAY_NUM ; i++ ) { //当该玩家不为空时 if (players[i] != null) { //输出玩家 System.out.print(players[i] + " : " ); //遍历输出玩家手上的扑克牌 for (String card : playersCards[i]) { System.out.print(card + "\t"); } } System.out.print("\n"); } } public static void main(String[] args) { ShowHand sh = new ShowHand(); System.out.println(Arrays.toString(sh.types)); sh.initPlayer("电脑玩家" , "孙悟空"); sh.initCards(); sh.initPlayerCards(); //下面测试所有扑克牌,没有实际作用 sh.showAllCards(); System.out.println("---------------"); //下面从"孙悟空"开始派牌 sh.deliverCard("孙悟空"); sh.showPlayerCards(); /* 这个地方需要增加处理: 1.牌面最大的玩家下注. 2.其他玩家是否跟注? 3.游戏是否只剩一个玩家?如果是,则他胜利了。 4.如果已经是最后一张扑克牌,则需要比较剩下玩家的牌面大小. */ //再次从"电脑玩家"开始派牌 sh.deliverCard("电脑玩家"); sh.showPlayerCards(); } } Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。 问题: F:\>javac ShowHand.java ShowHand.java:22: <identifier> expected private List<String> cards = new LinkedList<String>(); ^ ShowHand.java:26: <identifier> expected private List<String>[] playersCards = new List[PLAY_NUM]; ^ ShowHand.java:45: <identifier> expected public void initPlayer(String... names) ^ ShowHand.java:161: <identifier> expected } ^ 4 errors
Spring 怎么获取自定义注解标注的方法
在我自己的项目中,我自定义一个注解 ``` @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited public @interface ExcelSheet { /** * 表格类别 * @return */ String value(); /** * 创建的顺序(越大越往后执行) * @return */ int index(); } ``` 用来标注一些方法 例如: ``` @ExcelSheet(value = "excel", index = 1) public void firstCallImpl() { //一些执行的代码 } ``` 我现在的需求: 如果有多个方法被这个注解标注了那么,我能通过这个注解获取这个方法吗? 感谢大佬们的回答
请问,docker部署后如何修改spring boot 的应用配置文件?
  我是个java开发菜鸟,以前一直维护的是spring mvc+tomcat在linux的web项目,最近在学习spring boot +docker(docker-compose),试图改造我手上的Web项目,但遇到一个问题百思不得其解,还希望哪位大神伸手援助。   先说说我的需求,很简单,以前维护pring mvc+tomcat的时候,只是先在Linux部署tomcat、mysql等组件,然后将我的spring应用放至tomcat/webapps下就可以正常运行,因为部署环境不同,该应用经常需要根据现场实际情况,修改web的config等配置文件然后重启,如果应用报错还可以在指定目录下查看项目打印的各类log日志(log4j输出不同的日志)。虽然前期部署麻烦了一些,但有安装脚本什么的,维护起来也方便。  这段时间接触了spring boot +docker以后,也能够将应用通过docker(docker-compose)方式部署起来,但后续的问题怎么也搞不定,比如我想修改应用配置文件中的某一参数,然后重启docker容器就可以正常运行项目,但不知道如何修改application.xml。   我能想到的方法有三种:   1、通过volume将tomcat映射出来,docker-compose配置如下 ``` #docker-compose的版本 version: '3' #定义服务 services: #服务名称,可随意定义 gwqserive: build: #dockerfile的路径 context: gwqapp #dockerfile的名称 dockerfile: appDockerfile #相当于docker run -v的作用 volumes: - "./jar:/tmp" #容器名称 container_name: gwq-compose-app-container #该服务依赖的其他服务,该配置选项可修改启动顺序 depends_on: - mysqldbserver - redisServer links: - mysqldbserver - redisServer ``` appDockerfile: ``` FROM java:8-jre-alpine #维护者信息 MAINTAINER Gaowq VOLUME /tmp ADD SpringBootRedisDemo-0.0.1-SNAPSHOT.jar app.jar #为构建镜像设置监听端口,使容器在运行时监听 EXPOSE 8080 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ``` 好吧,然后容器运行以后,前往/tmp或jar目录下,发现全是tomcat缓存类似的文件,没啥用,跟之前的webapps完全不是一回事  2、想docker exec进去看看,然后。。。一脸meng bi!完全不知道需要的文件在哪  3、我能想到的方式,就是修改好应用配置文件,重新打包jar生成新的镜像,但。。。未免有点太复杂了吧!而且也没有解决我获取不同各类log4j日志的问题。   因为项目最终打包完毕后,将交于专门技术人员安装与维护,故上述情况经常会遇到,由于本人技术太菜,还请各位大神不吝赐教!谢谢!
求此java基础编程题的解法
有一个长度为 n(n=100)的数列,该数列定义为从 2 开始的递增有序偶数 ({2,4,6,...,200}),现在要求你按照顺序每 m 个数求出一个平均值,如果最后不足 m 个, 则以实际数量求平均值。编程输出该平均值序列。 要求: m 为大于等于 3 的整数
安卓新手想问下执行顺序的问题
这是Activity代码: ``` private ListView listView; private List<User.UserMess> list=new ArrayList<User.UserMess>(); public GetDataFromInternet getData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getData=new GetDataFromInternet(GlobalContants.USER_URL); getData.getData(GlobalContants.USER_URL); list=getData.getUserlist(); listView= (ListView) findViewById(R.id.list_test); if(list!=null){ System.out.println(list.size()); listView.setAdapter(new AdapterList(this,list)); } else { System.out.println("error"); } } ``` 定义的获取网络数据的类: ``` public class GetDataFromInternet { private String murl; User user; public ArrayList<User.UserMess> userlist=new ArrayList< User.UserMess>(); public GetDataFromInternet(String url){ this.murl=url; } public void getData(String url) { HttpUtils uitls=new HttpUtils(); uitls.send(HttpMethod.GET, url, new RequestCallBack<String>() { public void onSuccess(ResponseInfo responseInfo){ String result= (String) responseInfo.result; if(result!=null){ System.out.println("GetDateFromInternet:从网络获取数据"); parseDataTest(result); } } public void onFailure(com.lidroid.xutils.exception.HttpException error, String msg) { System.out.println("获取数据失败"); } }); } public void parseDataTest(String result) { Gson gson=new Gson(); user=gson.fromJson(result,User.class); if(user!=null){ this.userlist=user.data; System.out.println("GetDateFromIntent解析成功"); } } public ArrayList<User.UserMess> getUserlist() { return userlist; } ``` 我的问题是在Activity里初始化时,先执行了 ``` System.out.println(list.size()); ``` 这句测试代码,之后再完成了数据解析,导致我没获取到想拿的数据,最后执行结果控制台打印顺序为 I/System.out: 0 I/System.out: GetDateFromInternet:从网络获取数据 I/System.out: GetDateFromIntent解析成功
Java 小白求编写一道算法题
约翰和他的朋友索尼娅打一场战舰游戏。游戏在N行的正方形地图上进行,编号从1到N.每行包含N个单元格,每列标有连续的英文大写字母(A,B,C等)。每个单元通过由其行编号及其列编号组成的串来标识:例如,“9C” 表示第9行中的第三单元,“15D”表示第15行中的第四单元。 如下图所示,船只由最大面积为4个单元格的矩形定义,X落在船上时表示船被击中,如果一个船每个部位被击中,则该船被沉没。 ![图片说明](https://img-ask.csdn.net/upload/201701/21/1485011184_257885.png) 目标是计算沉没的船只的数量和被击中但未沉没的船只的数量。 例如,下图显示了一个大小为N = 4的地图,两个蓝色船只和五个用字母“x”标记的命中; ![图片说明](https://img-ask.csdn.net/upload/201701/21/1485011215_124224.png) 在这个例子中,一艘船已经沉没,另一艘已经被击中但没有沉没。在下一张图片中,沉船被显示为灰色,被击中但尚未沉没的船舶显示为红色: 船的位置被给出为字符串S,其包含分别描述每艘船的左上角和右下角单元的位置对。船舶的描述用逗号分隔。命中的位置为字符串T,包含描述被击中的地图单元的位置:对于上述示例中的地图,S =“1B 2C,2D 4D”和T =“2B 2D 3D 4D 4A”。 S中的船舶和T中的命中可以以任何顺序出现。 写一个函数: class Solution {public String solution(int N,String S,String T); ) 假定地图N的大小和分别描述船只命中位置的两个字符串S,T返回具有两个数字的字符串:沉没船舶的计数和已被击中但未沉没的船舶的数量,用逗号分隔。 例如,假设N = 4,S =“1B 2C,2D 4D”和T =“2B 2D 3D 4D 4A”,您的函数应返回“1,1”,如上所述。
哪位大佬能帮我把这段c程序改成Java谢谢。
#include <stdlib.h> #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define OVERFLOW -1 #define OK 1 #define ERROR 0 typedef int ElemType; typedef int Status; //顺序表存储结构的定义 typedef struct { ElemType *elem; int length; int listsize; }sqlist; //顺序表的初始化 Status InitList_sq(sqlist *L) { L->elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if (!L->elem) exit(OVERFLOW); L->length = 0; L->listsize = LIST_INIT_SIZE; return OK; } //顺序表的插入 Status ListInsert_sq(sqlist *L, int i, int e) { ElemType *newbase, *p, *q; if (i < 1 || i > L->length+1) { return ERROR; } if (L->length >= L->listsize) { newbase = (ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType)); if (!newbase) exit(OVERFLOW); L->elem = newbase; L->listsize = L->listsize+LISTINCREMENT; } q = &(L->elem[i-1]); for(p = &(L->elem[L->length-1]) ; p >= q ; --p) { *(p+1) = *p; } *q = e; ++L->length; return OK; } //顺序表的删除 Status ListDelete_sq(sqlist *L, int i, ElemType *e) { ElemType *p, *q; if ( i < 1 || i > L->length) { return ERROR; } p = &(L->elem[i-1]); *e = *p; q = L->elem + L->length-1; for(++p; p<= q; ++p) { *(p-1) = *p; } --L->length; return OK; } //顺序表的归并 void MergeList_sq(sqlist *La, sqlist *Lb, sqlist *Lc) { ElemType *pa ,*pb,*pc,*pa_last,*pb_last; pa = La->elem; pb = Lb->elem; Lc->listsize = Lc->length = La->length + Lb->length; pc = Lc->elem = (ElemType* )malloc(Lc->listsize*sizeof(ElemType)); if(!Lc->elem) { exit(OVERFLOW); } pa_last = La->elem + La->length - 1; pb_last = Lb->elem + Lb->length - 1; while(pa <= pa_last && pb <= pb_last) { if(*pa <= *pb) *pc++ = *pb++; else *pc++ = *pb++; } while(pa <= pa_last) *pc++ = *pa++; while(pb <= pb_last) *pc++ = *pb++; } int main() { int i; int n = 5; ElemType e; sqlist La,Lb,Lc; if(InitList_sq(&La)) { printf("Init is ok\n"); printf("Length:%d\n",La.length); printf("listsize:%d\n",La.listsize); } else { printf("error!"); } //顺序表输入初始值 printf("Please input the value of sq:\n"); for (i = 1; i <= n; i++) { scanf("%d",&e); if (ListInsert_sq(&La, i, e) != OK) { break; } } for(i = 1; i <= La.length; i++) { printf("e[%d]=%d\n",i-1, La.elem[i-1]); } printf("Length:%d\n\n",La.length); ///插入 printf("Please input the place of insert:\n"); scanf("%d",&i); printf("Please input the value of insert:\n"); scanf("%d",&e); if(ListInsert_sq(&La,i,e) == OK) { for (i = 1; i <= La.length; i++) { printf("e[%d]=%d\n",i-1, La.elem[i-1]); printf("Length:%d\n\n",La.length); } } //删除 printf("Please input the place of delet:\n"); scanf("%d",&i); if(ListDelete_sq(&La, i, &e) == OK) { printf("The delete elem is:%d\n",e); } for (i = 1; i < La.length; i++) { printf("e[%d]=%d\n",i-1, La.elem[i-1]); printf("Length:%d\n\n",La.length); } //顺序表的归并 printf("Please input the value of sq2:\n"); InitList_sq(&Lb); InitList_sq(&Lc); for (i = 1; i <= n; i++) { scanf("%d",&e); if (ListInsert_sq(&Lb, i, e) != OK) { break; } } MergeList_sq(&La, &Lb, &Lc); for(i = 1; i <= Lc.length; i++) { printf("e[%d]=%d\n",i-1, Lc.elem[i-1]); } return 0; }
求助一个自己写程序中的关于TreeSet同时去重和按加入顺序存储的bug。
昨天在写一个题目其中一块的任务是:将一些字符串去重,并且按给你时候的顺序输出出来,我没有想到用LinkedHashSet,第一想到的是使用TreeSet,故构造一个带comparator的treeset,让俩东西相等时候输出0,表示重复,那么treeset应该会不添加这个新元素,其余情况输出1表示直接添加到末尾,不做交换。然鹅实际情况与我想象的不一样,重复元素出现在特定位置时候无法去除(这一部分我通过debug 自己定义的compartatoro1,o2进行了对比已经证实comparator书写正确,是没有进行全遍历而造成的无法识别重复)。为了简单复现这个问题,我书写了加入简单integer类型的treeset,代码如下 ``` public class Tree { public static void main(String[] args) { TreeSet<Integer> treeSet = new TreeSet<>(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { // TODO Auto-generated method stub if(o1.equals(o2)) { return 0; } return 1; } }); treeSet.add(1); treeSet.add(2); treeSet.add(3); treeSet.add(1); treeSet.add(4); treeSet.add(1); treeSet.add(5); treeSet.add(7); treeSet.add(1); treeSet.add(6); treeSet.add(7); treeSet.add(1); for(int i : treeSet) { System.out.println(i); } } } ``` 这个代码也许你以为会输出1,2,3,4,5,7,6 但是实际情况是 1 2 3 1 4 5 7 6 ![图片说明](https://img-ask.csdn.net/upload/201904/04/1554354786_525204.png) 根据debug结果可以发现在加入第二个1时候(也就是加入这个1之前是1,2,3),这时候我认为加入1之后o1一直作为1,去和剩余3个元素作对比,如果重复就不会添加,然鹅实际情况再一次不同,o1一直作为1,也就是新添加的元素,只与2,3做了对比(也就是o2元素只遍历了2,3这两个)就结束了,程序发现并没有重复,因为根本就没看开头位置的东西是1,当然认为无重复,就把1又加了进去。 这个同理可以验证到字符串上面,并且更多的试验表明在总长超过6之后下标为2的元素也不会被o2遍历到。 小弟长时间自己思考,百度源码结论都应该是冒泡逐个遍历,但是并没能解决,还请各位老师指点一二。非常感谢!
求此java基础编程题的解法要注释
有一个长度为 n(n=100)的数列,该数列定义为从 2 开始的递增有序偶数 ({2,4,6,...,200}),现在要求你按照顺序每 m 个数求出一个平均值,如果最后不足 m 个, 则以实际数量求平均值。编程输出该平均值序列。 要求: m 为大于等于 3 的整数
C语言中顺序线性表的合并
结构体类型变量作为函数参数只能作为指针传递吗?为什么我写一个函数参数是结构体,下面引用时报错 typedef struct { char name[10]; char sex; long num; }ElemType;//自定义元素类型。 typedef struct{ ElemType *elem;//存储空间基址。 int length;//当前长度。 int listsize;//当前分配的存储容量(以sizeof(ElemType)为单位)。 }SqList;//定义顺序线性表类型 void MergeList_Sq(SqList La,SqList Lb,SqList *Lc){ ElemType *pa,*pb,*pc; pa=La->elem;pb=Lb->elem; }
做了一个小时的面试题(没有过 希望大家帮忙答下 虽然很幼稚 毕竟每个人都是这么过来的吗 感激了!)
XX软件工程师笔试试题 注:1、请参考人员将答案写在答题纸上,勿将答案写在此卷上。 2、请参考人员将编号与姓名填写在答题纸上。 1、 以下数据结构中不属于线性数据结构的是()。 A、队列 B、线性表 C、二叉树 D、栈 我的答案:C 2、 在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是()。 A、 可行性分析 B、需求分析 C、详细设计 D、程序编码 我的答案:B 3、 结构化程序设计主要强调的是()。 A、 程序的规模 B、程序的易读性 C、程序的执行效率 D、程序的可移植性 我的答案:C 4、 在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段()。 A、 概要设计 B、详细设计 C、可行性分析 D、需求分析 我的答案:B 5、 下列关于栈的叙述中正确的是()。 A、 在栈中只能插入数据 B、在栈中只能删除数据 B、 栈是先进先出的线性表 D、栈是先进后出的线性表 我的答案:D 6、 下面不属于软件设计原则的是()。 A、 抽象 B、模块化 C、自底向上 D、信息隐蔽 我的答案:C 7、 对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为()。 A、 N+1 B、N C、(N+1)/2 D、N/2 我的答案:C 8、 视图设计一般有3种设计次序,下列不属于视图设计的是()。 A、 自顶向下 B、由外向内 C、由内向外 D、自底向上 我的答案:C 9、下列有关数据库的描述,正确的是()。 A、数据库是一个DBF文件 B、数据库是一个关系 C、数据库是一个结构化的数据集合 D、数据库是一组文件 我的答案:C 10、下列说法中,不属于数据模型所描述的内容的是()。 A、数据结构 B、数据操作 C、数据查询 D、数据约束 我的答案:A 11、若按功能划分,软件测试的方法通常分为白盒测试方法和(黑盒测试方法)。 12、数据库系统的三级模式分别为(级联)模式、内部级模式与外部级模式。 13、在最坏情况下,冒泡排序的时间复杂度为(N+1/2)。 14、在面向对象方法中,信息隐蔽是通过对象的(封装)性来实现的。 15、关系模型的数据操纵既是建立在关系上的数据操纵,一般有(插入)、增加、删除、和修改四种操作。 16、TIME()的返回值的数据类型是(String)类型。 17、编写SQL语句 1)、创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话 我的答案: create table student( studentCardNo number(2) primary key, name char(10), age number(2), sex char(2) check(sex in (‘男’,’女’)), address varchar2(100), tel number(2) ) 2)、修改学生表的结构,添加一列信息,学历 我的答案: alter table student add(xueli varchar2(20)); 3)、修改学生表的结构,删除一列信息,家庭住址 我的答案: alter table student drop column address; 4)、向学生表添加如下信息: 学号 姓名 年龄 性别 联系电话 学历 1 A 22 男 123456 小学 2 B 21 男 119 中学 3 C 23 男 110 高中 4 D 18 女 114 大学 我的答案: insert into student values(‘&1’,’&2’,’&3’); 一次一次添加 5)修改学生表的数据,将电话号码以11开头的学员的学历改为“大专” 我的答案: update student set xueli=”大专” where tel like 11%; 6)删除学生表的数据,姓名以C开头,性别为‘男’的记录删除 我的答案: delete student where name like C% or sex=”男”; 7)查询学生表的数据,将所有年龄小于22岁的,学历为“大专”的,学生的姓名和学号显示出来 我的答案: select name,studentCardNo from student where age<22 and xueli=”大专”; 8)查询学生表的数据,查询所有信息,列出前25%的记录 我的答案: select top*0.25 from student; 9)查询出所有学生的姓名,性别,年龄降序排列 我的答案: select name,sex,age from student where age desc; 10)按照性别分组查询所有的平均年龄 我的答案: select avg(age) from student group by sex; 18、什么是存储过程?为什么存储过程要比单纯的SQL语句执行起来要快? 我的答案: 存储过程算是一种优化查询需要比单存SQL语句执行的要快 19、两张关联表,删除主表中已经在副表中没有的信息 我的答案 delete from fubiao a where a.fid not in(select id from zhubiao) 20、程序题: 用1、2、2、3、4、5这六个数字,用java或你熟悉的语言,打印出所有不同的排列,如:512234、412345等,要求:“4”不能再第三位,“3”与“5”不能相连。并将这些数据按从小到大输出。 我的答案 我的写的不好 没贴下 笔试的时候没写全 21、String 和 StringBuffer的区别 我的答案 String定长 StringBuffer 变长 22、&和&&的区别 我的答案 &短路与 &&逻辑与 网上答案: & 是位运算符,表示按位与运算, && 是逻辑运算符,表示逻辑与(and)。 23、final,finally,finalize的区别 我的答案 Final静变量关键字,finally异常关键字,finalize 网上答案 final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 finally是异常处理语句结构的一部分,表示总是执行。 finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法, 可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 24、数组有没有length()这个方法?String有没有length()这个方法? 我的答案: 数组没有length()这个方法,有length的属性。 String有length()这个方法。 25、是否可以继承String类? 我的答案: 不可以 解释的很乱 26、说出数据连接池的工作机制是什么? 我的答案: 反正解释的很乱我感觉 27、垃圾回收的优点和原理。并考虑2种回收机制。 我的答案: 动态回收 解释的很乱 网上答案: Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解, 它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有"作用域"的概念, 只有对象的引用才有"作用域"。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。 垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有 使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。 回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。 28、你所知道的集合类都有哪些?区别?主要方法? 我的答案: Arraylist 非线性的、Vertor线性的 29、JSP的内置对象及方法。 我的答案: Page,exception,out,page content,application,request,reponse,session,config 30、页面间对象传递的方法。 我的答案: 那几个方法都写错了 31、你知道Request对象的主要方法有哪些? 32、J2EE是技术还是平台还是框架? 我的答案: J2EE是技术也是平台 网上答案: J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。 J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。 33、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种(例如GBK编码类型)编码的字符串? Request encording(“GBK”) 34、j2ee常用的设计模式?说明工厂模式。 Gof23种设计模式 工厂模式:Factory 网上答案: Java中的23种设计模式: Factory(工厂模式), Builder(建造模式), Factory Method(工厂方法模式), Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式), Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式), Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式), Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式), Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式), Observer(观察者模式), State(状态模式), Strategy(策略模式), Template Method(模板方法模式), Chain Of Responsibleity(责任链模式) 工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例, 通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。 首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。 然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。 当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。 35、JSP四种会话跟踪技术 我的答案: Application cookie session 36、排序都有哪几种方法?请举例 冒泡 选择 快序 二分查找 网上答案: 排序的方法有:插入排序(直接插入排序、希尔排序), 交换排序(冒泡排序、快速排序), 选择排序(直接选择排序、堆排序), 归并排序,分配排序(箱排序、基数排序) 快速排序的伪代码。 //使用快速排序方法对a[ 0 :n- 1 ]排序 从a[ 0 :n- 1 ]中选择一个元素作为m i d d l e,该元素为支点 把余下的元素分割为两段left 和r i g h t,使得l e f t中的元素都小于等于支点,而right 中的元素都大于等于支点 递归地使用快速排序方法对left 进行排序 递归地使用快速排序方法对right 进行排序 所得结果为l e f t + m i d d l e + r i g h t 37、关于模块间的设计原则? 规范要一样 38、项目过程一般是怎样的?你参加过几个项目开发?参加过的项目流程是怎样的?自己负责与人合作工作内容及自我评价? 从需求调研——设计开发——实施 参加过网站的实施 模板的制作 39、tomcat自动关闭常见原因? 我的答案: 现在没遇到过 40、如何设置TOMCAT内存和连接数? 我的答案: Tomcat群集 41、你如何理解Tomcat是什么? 我的答案: Tomcat是JSP Servlet 容器恰当的说 42、静态变量和实例变量的区别? 我的答案: 静态变量域用final修饰,每次都被调用 实例变量则不会 43、IE、FF下面CSS的解释区别 我的答案: 自己编的 44、web前端技术你了解哪些技术? 我的答案: JAVAScript,CSS,DIV,Ajax,Ajax框架,DWR,dojo,jguery 45、什么是报表?什么是报表控件,作用是什么?你了解哪些报表工具? 我的答案: 解释的很乱 46、你了解的那些统计图表类型? 我的答案: 自己编的 47、Flex与数据库连接的三种方式? 我的答案: 自己编的 ------------------------------------------------------- 我答错的、 错在哪里? 没答上的帮忙解答下? 感激了 !
main.java:3: 错误: 类Point是公共的, 应在名为 Point.java 的文件中声明,这是什么错误
public static class Point { public double x; public double y; //定义一个点方法(函数),其表示为自然语言中的平面坐标点 public Point(double x, double y) { //定义点的横轴坐标值 this.x=x; //定义点的纵轴坐标值 this.y=y; } //根据已知点计算两点间的距离 public double getDistance(Point p) { //定义一个双精度的参数x放两点横轴坐标差值的绝对值 double x=Math.abs(this.x-p.x); //定义一个双精度的参数y放两点纵轴坐标差值的绝对值 double y=Math.abs(this.y-p.y); //根据正弦定理计算出一个双精度的两点坐标距离的值,并将其作为该方法(计算两点间坐标距离)的返回值 return Math.sqrt(x*x+y*y); } //根据已知点计算方位角 public double getAngle(Point p) { //定义一个双精度的参数x放两点横轴坐标差值的绝对值 double x=Math.abs(this.x-p.x); //定义一个双精度的参数y放两点纵轴坐标差值的绝对值 double y=Math.abs(this.y-p.y); //定义一个双精度的参数z放y/x的绝对值 double z=Math.abs(y/x); //计算出两点的坐标方位角,并将其作为该方法(计算已知两点构成的边的坐标方位角)的返回值 return (1/Math.atan(z))/Math.PI*180; } } public interface Check { public static final int Rou=206265; double check(Point P1, Point P2); } //前方交会测量计算 public static class Front_Intersection implements Check { public Point pointA = null; public Point pointB = null; public double angleA = 0; public double angleB = 0; public Point QFJH() { // 定义待定淀P的横轴坐标和纵轴坐标 double x_P = 0; double y_P = 0; int sign = 1; /* * 求出P点的坐标算法,根据余切定理式子的程序化,只需将对应点按逆时针顺序放入即可求出待定点,具体算法如下 */ double sAcB = Math.sin(angleA) * Math.cos(angleB); double cAsB = Math.cos(angleA) * Math.sin(angleB); double sAsB = Math.sin(angleA) * Math.sin(angleB); x_P = (pointA.x * sAcB + pointB.x * cAsB + sign * (pointA.y - pointB.y) * sAsB) / (sAcB + cAsB); y_P = (pointA.y * sAcB + pointB.y * cAsB + sign * (pointB.x - pointA.x) * sAsB) / (sAcB + cAsB); return new Point(x_P, y_P);// 返回P点的坐标值 } /* * 前方交会检核,返回值为求得的两点的横向位移之差的绝对值。 * */ @Override public double check(Point P1, Point P2) { // TODO Auto-generated method stub return P1.getDistance(P2); } } //侧方交会测量计算 public static class Side_Intersection implements Check { public Point pointA = null; public Point pointB = null; public Point pointC = null; public Point pointP = null; public double angleA = 0; public double angleP = 0; public double angleB = 180 - ( angleA + angleP ); public Point CFJH(){ //定义待定淀P的横轴坐标和纵轴坐标 double x_P =0; double y_P =0; int sign = 1; //求出P点的坐标算法 double sAcB = Math.sin(angleA)*Math.cos(angleB); double cAsB = Math.cos(angleA)*Math.sin(angleB); double sAsB = Math.sin(angleA)*Math.sin(angleB); x_P = (pointA.x*sAcB + pointB.x*cAsB + sign*(pointA.y - pointB.y)*sAsB) /(sAcB + cAsB); y_P = (pointA.y*sAcB + pointB.y*cAsB + sign*(pointB.x - pointA.x)*sAsB) /(sAcB + cAsB); return new Point(x_P, y_P);//返回P点的坐标值 } /* * 侧方交会检测方法,返回的是AP的方位角,由于基本的集合知识可以知道AP方位角正弦值的倒数即为观测∠APC的弧度 * */ @Override public double check(Point P1, Point P2) { // TODO Auto-generated method stub return P1.getAngle(P2); } } //主函数 public static class Main { public static void main(String[] args) { // TODO Auto-generated method stub /* * 前方交会测量实现以及对测量值的检核 * */ Point pC1 = new Point(0, 200); Point pB1 = new Point(0, 100); Point pA1 = new Point(0,0); double angleC1 = 44.992/180*Math.PI; double angleB11 = 89.999/180*Math.PI; double angleB12 = 90.001/180*Math.PI; double angleA1 = 45.0/180*Math.PI; //建立前方测量的第一次测量对象test Front_Intersection test = new Front_Intersection(); //依次按逆时针放入对应的点和参数值 test.pointA = pC1; test.pointB = pB1; test.angleA = angleC1; test.angleB = angleB11; Point ret = test.QFJH(); //建立前方测量的第二次测量对象test1 Front_Intersection test1 = new Front_Intersection(); //依次按逆时针放入对应的点和参数值 test1.pointA = pB1; test1.pointB = pA1; test1.angleA = angleB12; test1.angleB = angleA1; Point ret0 = test1.QFJH(); //第一次测量出来的点P的坐标 Point pP11 = new Point (ret.x , ret.y); //第二次测量出来的点P的坐标 Point pP12 = new Point (ret0.x , ret0.y); /* * * 以下为输出语句 * */ System.out.println("根据点C、B,以及∠C和∠CBP求得点P的第一次测量值:"); System.out.println("第一次测量出的点P :"+"(" + ret.x + ", " + ret.y +")"); System.out.println("根据点B、A,以及∠PBA和∠BAP求得点P的第二次测量值:"); System.out.println("第二次测量出的点P :"+"(" + ret0.x + ", " + ret0.y +")"); //实现检测方法 System.out.println("下面进行测量检测:"); double m = test.check(ret, ret0); if(m <= 0.2) { System.out.println("检测合格"); System.out.println("为了更精确P点,取两次测量的平均值:"); Point AVGP1 = new Point ((ret.x + ret0.x)/2 , (ret.y + ret0.y)/2); System.out.println("点P的综合测量值为 :" + "(" + AVGP1.x + ", " + AVGP1.y +")"); System.out.println("点P到点A的距离为:" + AVGP1.getDistance(pA1)); System.out.println("点P到点B的距离为:" + AVGP1.getDistance(pB1)); System.out.println("点P到点C的距离为:" + AVGP1.getDistance(pC1)); System.out.println("AP的方位角为:" + AVGP1.getAngle(pA1)); System.out.println("BP的方位角为:" + AVGP1.getAngle(pB1)); System.out.println("CP的方位角为:" + AVGP1.getAngle(pC1)); } else System.out.println("检测不合格 , 需要重新检测!!!"); /* * * 以下为侧方交会的实现以及对测量值的检核 * */ //侧方交会的参数值 Point pC2 = new Point(100, 0); Point pB2 = new Point(0, 100); Point pA2 = new Point(0, 0); double angleP2 = 45.002/180*Math.PI; double anglePO = 45.005/180*Math.PI; double angleA2 = 44.995/180*Math.PI; double angleB2 = (90.0 - angleP2 + angleA2)/180*Math.PI; //侧方交会的测量对象Test Side_Intersection Test= new Side_Intersection(); //按逆时针顺序依次放入参数 Test.pointA = pB2; Test.pointB = pA2; Test.angleA = angleB2; Test.angleP = angleP2; Point ret1 = Test.CFJH(); //求得的P点值 Point pP2 = new Point (ret1.x , ret1.y); //定义一个双精度变量n放置测量出来的P点到A的方位角正切值得倒数,即∠APC的测量值 double n = 1/Math.atan(Test.check(ret1, Test.pointA)); //定义一个双精度变量l放置点∠APC和观测值和测量值之差的绝对值 double l = Math.abs(anglePO - n); //进行检核判断 if(l <= 40){ System.out.println("检测合格"); System.out.println("点P的综合测量值为 :" + "(" + ret1.x + ", " + ret1.y +")"); System.out.println("点P到点A的距离为:" + pP2.getDistance(pA2)); System.out.println("点P到点B的距离为:" + pP2.getDistance(pB2)); System.out.println("点P到点C的距离为:" + pP2.getDistance(pC2)); System.out.println("AP的方位角为:" + pP2.getAngle(pA2)); System.out.println("BP的方位角为:" + pP2.getAngle(pB2)); System.out.println("CP的方位角为:" + pP2.getAngle(pC2)); } else System.out.println("检测不合格 , 需要重新检测!!!"); } }
动态规划入门到熟悉,看不懂来打我啊
持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt;=2,n∈N*)根据定义,前十项为1, 1, 2, 3...
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
防劝退!数据结构和算法难理解?可视化动画带你轻松透彻理解!
大家好,我是 Rocky0429,一个连数据结构和算法都不会的蒟蒻… 学过数据结构和算法的都知道这玩意儿不好学,没学过的经常听到这样的说法还没学就觉得难,其实难吗?真难! 难在哪呢?当年我还是个小蒟蒻,初学数据结构和算法的时候,在忍着枯燥看完定义原理,之后想实现的时候,觉得它们的过程真的是七拐八绕,及其难受。 在简单的链表、栈和队列这些我还能靠着在草稿上写写画画理解过程,但是到了数论、图...
【搞定 Java 并发面试】面试最常问的 Java 并发基础常见面试题总结!
本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star!【Java学习 面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。欢迎 Star!)。 另外推荐一篇原创:终极推荐!可能是最适合你的Java学习路线 方法 网站 书籍推荐! Java 并发基础常见面试题总结 1. 什么是线程和进程? 1.1. 何为进程? 进程是程...
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给
shell脚本:备份数据库、代码上线
备份MySQL数据库 场景: 一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:dbname-2019-11-23.sql 4)需要对1天以前的所有sql文件压缩,格式为gzip 5)本地数据保留1周 6)需要把备份的数据同步到远程备份中心,假如...
iOS Bug 太多,苹果终于坐不住了!
开源的 Android 和闭源的 iOS,作为用户的你,更偏向哪一个呢? 整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 毋庸置疑,当前移动设备操作系统市场中,Android 和 iOS 作为两大阵营,在相互竞争的同时不断演进。不过一直以来,开源的 Android 吸引了无数的手机厂商涌入其中,为其生态带来了百花齐放的盛景,但和神秘且闭源的 iOS 系统相比,不少网友...
神经⽹络可以计算任何函数的可视化证明
《Neural Networks and Deep Learning》读书笔记第四篇本章其实和前面章节的关联性不大,所以大可将本章作为小短文来阅读,当然基本的深度学习基础还是要有的。主要介绍了神经⽹络拥有的⼀种普遍性,比如说不管目标函数是怎样的,神经网络总是能够对任何可能的输入,其值(或者说近似值)是网络的输出,哪怕是多输入和多输出也是如此,我们大可直接得出一个结论:不论我们想要计算什么样的函数,...
聊聊C语言和指针的本质
坐着绿皮车上海到杭州,24块钱,很宽敞,在火车上非正式地聊几句。 很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。 那么,什么是指针,为什么大家都想避开指针。 很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。 指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起...
为什么你学不过动态规划?告别动态规划,谈谈我的经验
动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看 0-1 背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递归,谈谈我的经验 对于动态规划,春招秋招时好多题都会用到动态...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
如何安装 IntelliJ IDEA 最新版本——详细教程
IntelliJ IDEA 简称 IDEA,被业界公认为最好的 Java 集成开发工具,尤其在智能代码助手、代码自动提示、代码重构、代码版本管理(Git、SVN、Maven)、单元测试、代码分析等方面有着亮眼的发挥。IDEA 产于捷克,开发人员以严谨著称的东欧程序员为主。IDEA 分为社区版和付费版两个版本。 我呢,一直是 Eclipse 的忠实粉丝,差不多十年的老用户了。很早就接触到了 IDEA...
面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性...
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
为什么要推荐大家学习字节码?
配套视频: 为什么推荐大家学习Java字节码 https://www.bilibili.com/video/av77600176/ 一、背景 本文主要探讨:为什么要学习 JVM 字节码? 可能很多人会觉得没必要,因为平时开发用不到,而且不学这个也没耽误学习。 但是这里分享一点感悟,即人总是根据自己已经掌握的知识和技能来解决问题的。 这里有个悖论,有时候你觉得有些技术没用恰恰是...
互联网公司的裁员,能玩出多少种花样?
裁员,也是一门学问,可谓博大精深!以下,是互联网公司的裁员的多种方法:-正文开始-135岁+不予续签的理由:千禧一代网感更强。95后不予通过试用期的理由:已婚已育员工更有责任心。2通知接下来要过苦日子,让一部分不肯同甘共苦的员工自己走人,以“兄弟”和“非兄弟”来区别员工。3强制996。员工如果平衡不了工作和家庭,可在离婚或离职里二选一。4不布置任何工作,但下班前必须提交千字工作日报。5不给活干+...
【超详细分析】关于三次握手与四次挥手面试官想考我们什么?
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握...
新程序员七宗罪
当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 ...
活到老,学到老,程序员也该如此
全文共2763字,预计学习时长8分钟 图片来源:Pixabay 此前,“网传阿里巴巴要求尽快实现P8全员35周岁以内”的消息闹得沸沸扬扬。虽然很快被阿里辟谣,但苍蝇不叮无缝的蛋,无蜜不招彩蝶蜂。消息从何而来?真相究竟怎样?我们无从而知。我们只知道一个事实:不知从何时开始,程序猿也被划在了“吃青春饭”行业之列。 饱受“996ICU”摧残后,好不容易“头秃了变强了”,即将步入为“高...
Vue快速实现通用表单验证
本文开篇第一句话,想引用鲁迅先生《祝福》里的一句话,那便是:“我真傻,真的,我单单知道后端整天都是CRUD,我没想到前端整天都是Form表单”。这句话要从哪里说起呢?大概要从最近半个月的“全栈工程师”说起。项目上需要做一个城市配载的功能,顾名思义,就是通过框选和拖拽的方式在地图上完成配载。博主选择了前后端分离的方式,在这个过程中发现:首先,只要有依赖jQuery的组件,譬如Kendoui,即使使用...
2019年Spring Boot面试都问了什么?快看看这22道面试题!
Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、如何在 Spring Boot 中禁用 Actuator 端点安全性? 7、如何在自定义端口上运行 Sprin...
【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了
字节跳动这家公司,应该是所有秋招的公司中,对算法最重视的一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到的几个算法题,并且每个算法题我都详细着给出了最优解,下面再现当时的面试场景。看完一定让你有所收获 一、小牛试刀:有效括号 大部分情况下,面试官都会问一个不怎么难的问题,不过你千万别太开心,因为这道题往往可以拓展出更多有难度的问题,或者一道题看起来很简单,但是给出最优解,确实很...
关于裁员几点看法及建议
最近网易裁员事件引起广泛关注,昨天网易针对此事,也发了声明,到底谁对谁错,孰是孰非?我们作为吃瓜观众实在是知之甚少,所以不敢妄下定论。身处软件开发这个行业,近一两年来,对...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
相关热词 c# id读写器 c#俄罗斯方块源码 c# linq原理 c# 装箱有什么用 c#集合 复制 c# 一个字符串分组 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图
立即提问