请问void main会造成什么后果? 40C

请问c语言里头的main函数如果不返回int的话,会有什么严重的后果吗?

c

6个回答

main函数返回了int,主程序一结束,也没有了

可以说加不加int是没有区别的。在ANSI C的标准中,main的标准返回值是整型,如果你什么都没有加,编译系统会自动加上int类型的。这时如果你使用GCC的话(VC是没有的)会有一个警告。
void是无类型,表示没有返回值,你的主函数如果不需要返回的话,最好加上它。
最后,建议你的主函数显式的使用int类型,并return 0;这是一个好习惯,开始的时候没什么用,时间长了才能看出来。

注意以下几点
1.main函数不能再其他函数中调用
2.标准C的要求是这样,但在某些编译器下可以接受void main,这是一条不成文规定(返回0给操作系统)
3.非0返回通常意味着错误发生,其他程序可以通过这个来检测你的程序是否正常结束

这是一个好问题,我也查了一下,楼主参考,http://blog.csdn.net/piaojun_pj/article/details/5986516

不会造成后果,我都是用void main(){}写的C语言主函数,但是C++不一样,C++编译器要求你返回。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Java中的父类含有子类引用
1.C继承与B,<br> B继承与A,<br> A中含有C的引用 <br> <br> <br> 问题: 1.为什么A中的构造器中的this指代C对象<br> 2.将A中构造器的this 赋值给A中的C类型变量c 会不会造成循环引用,请问这个要怎么理解? <br> <br> 代码如下 ``` class A{ private String aName; private C c; public A(){ c = (C)this; System.out.println("A"+this); } } class B extends A{ private String bName; public B(){ super(); System.out.println("B"+this); } } class C extends B{ private String cName; public C(){ } } ``` main函数代码如下 ``` public class Main { public static void main(String[] args) { C c = new C(); } } ``` <br> idea截图<br> ![图片说明](https://img-ask.csdn.net/upload/202003/31/1585635073_150994.png) ![图片说明](https://img-ask.csdn.net/upload/202004/01/1585720929_662957.png) <br> 这个问题源于spring源码中的ClassPathXmlApplicationContext 逐层调用父类,当进入AbstractApplicationContext中时,执行了这步 <br> ``` public AbstractApplicationContext() { this.resourcePatternResolver = getResourcePatternResolver(); } ``` 然后执行了 <br> ``` protected ResourcePatternResolver getResourcePatternResolver() { return new PathMatchingResourcePatternResolver(this); } ``` <br> 截图如下 ![图片说明](https://img-ask.csdn.net/upload/202004/01/1585720867_684064.png) <br> 这里的this 为什么指代的不是AbstractApplicationContext类,而是ClassPathXmlApplicationContext
一道C++难解的题,内存地址与类造成假死
``` #include <iostream> using namespace std; class Human { public:         int x;         void hi(){cout<<"XXXXXX"<<endl;}         void ho()         {                 cout<<x<<endl;                 int* q = new int;                 *q = 3;                 x = (int)q;         }         void hq()         {        int* q = new int;                 *q = 3;                 //这里 能不能 给 x变量 绑定一个地址。这个 地址是 q的创建的                 cout<<"我自己都不知道我自己应该在哪里        "<<*q<<"  "<<q<<endl;                 delete q;                         }         Human(): x(1)         {                 cout<<"我应该在不出现的吧?  "<<&x<<endl;         }         ~Human()         {                 delete (int* )x;         } }; int main() {         Human* p = NULL;                 p->hi();         p->hq();         //p->ho(); //直接死         p = new Human;         p->ho(); //前面执行直接死         p->hq();         return 0; } ``` 可以让主函数Main里面的 //p->ho(); //直接死 这里的代码正常运行 Human* p = NULL; 这个类是 NULL 空的。 但是代码都是在内存中的。 所以 p->hi(); p->hq(); 没有问题。 那么调用p->ho(); 会产生一个问题。此时 的int x还没有地址。我想给这个x 创建一个内存地址 让他的调用没问题。
配置shiro后,启动时出现 is not eligible for getting processed by all BeanPostProcessors
想要学习一下shiro权限管理,在网上一边学习一边实操,但配好之后认证登录没问题,但拦截和授权却不见作用。并在启动时出现如下: >INFO 11364 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'shiroConfig' of type [com.bdg.go.config.ShiroConfig$$EnhancerBySpringCGLIB$$de04983d] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) >…… 在启动项目时,shiroConfig下的所有bean都出现了以上提示: ![图片说明](https://img-ask.csdn.net/upload/202004/03/1585894947_634084.png) 在网上查了很多,基本意思就是说Bean的提前注入造成的,但我研究半天依然不知道如何解决。所以跪求大神教学。 项目是spring boot 2.0+ shiroConfig如下: ``` java @Configuration @Slf4j public class ShiroConfig { @Value("${spring.redis.host}") private String host; @Value("${spring.redis.port}") private int port; @Value("${spring.redis.timeout}") private int timeout; @Value("${spring.redis.password}") private String password; @Bean public FilterRegistrationBean delegatingFilterProxy(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); DelegatingFilterProxy proxy = new DelegatingFilterProxy(); proxy.setTargetFilterLifecycle(true); proxy.setTargetBeanName("shiroFilter"); filterRegistrationBean.setFilter(proxy); return filterRegistrationBean; } /* * 创建ShrioFilterFactoryBean */ @Bean("shiroFilter") public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager){ ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); log.info("经过过滤器"); // 过滤器 // 过滤链定义,从上向下顺序执行,一般将 /**放在最为下边 Map<String, String> filterMap = new LinkedHashMap<>(); /* * Shiro内置过滤器,可以实现权限相关的拦截器,常用的有: * anon:无需认证(登录)即可访问 * authc:必须认证才可以访问 * user:如果使用rememberme的功能可以直接访问 * perms:该资源必须得到资源权限才能访问 * role:该资源必须得到角色资源才能访问 */ //放过登录请求 filterMap.put("/login", "anon"); filterMap.put("/**", "authc");//其他资源全部拦截 filterMap.put("/logout", "logout"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap); shiroFilterFactoryBean.setLoginUrl("/login"); return shiroFilterFactoryBean; } @Bean("securityManager") public DefaultWebSecurityManager securityManager( @Qualifier("cookieRememberMeManager")CookieRememberMeManager cookieRememberMeManager, @Qualifier("redisCacheManager")RedisCacheManager redisCacheManager, @Qualifier("sessionManager")SessionManager sessionManager, @Qualifier("userRealm")UserRealm userRealm){ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); //注入rememberme对象 securityManager.setRememberMeManager(cookieRememberMeManager); //注入session securityManager.setSessionManager(sessionManager); //注入缓存管理对象 securityManager.setCacheManager(redisCacheManager); //将Realm注入SecurityManager securityManager.setRealm(userRealm); return securityManager; } @Bean("userRealm") public UserRealm userRealm(@Qualifier("hashedCredentialsMatcher")HashedCredentialsMatcher hashedCredentialsMatcher){ UserRealm userRealm = new UserRealm(); //设置解密规则 userRealm.setCredentialsMatcher(hashedCredentialsMatcher); userRealm.setCachingEnabled(false); return userRealm; } @Bean("hashedCredentialsMatcher") public HashedCredentialsMatcher hashedCredentialsMatcher(){ HashedCredentialsMatcher hashedCredentialsMatcher = new HashedCredentialsMatcher(); hashedCredentialsMatcher.setHashAlgorithmName("md5"); hashedCredentialsMatcher.setHashIterations(1); return hashedCredentialsMatcher; } @Bean("sessionManager") public SessionManager sessionManager(@Qualifier("redisSessionDAO")RedisSessionDAO redisSessionDAO){ MySessionManager mySessionManager = new MySessionManager(); mySessionManager.setSessionIdUrlRewritingEnabled(false); //取消登陆跳转URL后面的jsessionid参数 mySessionManager.setSessionDAO(redisSessionDAO); mySessionManager.setGlobalSessionTimeout(-1);//不过期 return mySessionManager; } @Bean("redisManager") public RedisManager redisManager(){ RedisManager redisManager = new RedisManager(); redisManager.setHost(host+":"+port); redisManager.setTimeout(timeout); redisManager.setPassword(password); return redisManager; } @Bean("redisCacheManager") public RedisCacheManager redisCacheManager(@Qualifier("redisManager")RedisManager redisManager){ RedisCacheManager redisCacheManager = new RedisCacheManager(); redisCacheManager.setRedisManager(redisManager); return redisCacheManager; } @Bean("redisSessionDAO") public RedisSessionDAO redisSessionDAO(){ RedisSessionDAO redisSessionDAO = new RedisSessionDAO(); redisSessionDAO.setRedisManager(redisManager()); return redisSessionDAO; @Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){ AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor(); authorizationAttributeSourceAdvisor.setSecurityManager(securityManager); return authorizationAttributeSourceAdvisor; } @Bean("rememberMeCookie") public SimpleCookie rememberMeCookie() { log.info("ShiroConfiguration.rememberMeCookie()============="); SimpleCookie simpleCookie = new SimpleCookie("rememberMe"); simpleCookie.setMaxAge(259200); return simpleCookie; } @Bean("cookieRememberMeManager") public CookieRememberMeManager cookieRememberMeManager(@Qualifier("rememberMeCookie")SimpleCookie rememberMeCookie) { log.info("ShiroConfiguration.rememberMeManager()========"); CookieRememberMeManager manager = new CookieRememberMeManager(); manager.setCookie(rememberMeCookie); return manager; } } ``` UserRealm: ``` @Slf4j public class UserRealm extends AuthorizingRealm { @Autowired private UserService userService; @Autowired private RoleService roleService; @Autowired private PrivilegeService privilegeService; /** * 前置处理非空对象 * shiroFilter在Spring自动装配bean之前实例化 * 相关联的Bean都被初始化完成且没有被代理(包括BeanPostProcessor也会无效)导致事务失效等...... * 使用动态获取代理对象即可解决 */ protected void preHandleNull() { if (userService == null) { userService = SpringContextUtils.getContext().getBean(UserService.class); } if (roleService == null) { roleService = SpringContextUtils.getContext().getBean(RoleService.class); } if (privilegeService == null) { privilegeService = SpringContextUtils.getContext().getBean(PrivilegeService.class); } } /* * 执行授权逻辑:因为设计每个用户只有一个角色,所以roleMapper.getRoleByUserName(user)返回值只有一个实体。 * @author Innocence */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { preHandleNull(); log.info("自定义UserRealm执行授权逻辑开始=================="); User user = (User) principalCollection.getPrimaryPrincipal(); if (null != user) { List<String> roleLists = new ArrayList<>(); List<String> privilegeLists = new ArrayList<>(); Role role = (Role) roleService.findRoleByUserName(user.getUsername()).getData(); SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); roleLists.add(role.getName()); info.addRoles(roleLists); List<Privilege> privilegeByRoleId = (List<Privilege>) privilegeService.getPrivilegeByRoleId(role).getData(); for (Privilege privilege : privilegeByRoleId) { privilegeLists.add(privilege.getPrivilegeName()); } info.addStringPermissions(privilegeLists); return info; } return null; } /* * 执行认证逻辑 * @author Innocence */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { preHandleNull(); log.info("自定义UserRealm执行认证逻辑开始=================="); UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken; String username = token.getUsername(); User userInfo = (User) userService.findUserInfoByUserName(username).getData(); if (userInfo == null) { return null; } log.info("通过用户名查到的用户信息userInfo:[" + userInfo.toString() + "]"); return new SimpleAuthenticationInfo( userInfo, userInfo.getPassword(), getName() ); } } ```
一个奇怪的JAVA问题,汉字导致JFrame.DISPOSE_ON_CLOSE无法关闭窗口
编程过程中偶然发现JFrame窗口存在点击关闭后进程未终止情况,排查之后才发现竟然是中文输入导致,即使是如下最简单程序 public static void main(String[] args) { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); f.setSize(700,600); f.add(new JTextArea()); f.setVisible(true); } 在JTextArea中输入英文、数字均没有影响,只要输入过中文,最后窗口便没法关闭,不管是Area、field、combobox之类的都一样,有没有大神能解决这个问题啊,太折磨人了 2020.3.3 今天尝试更换输入法后竟然发现原因是搜狗输入法造成的,更换输入法为讯飞以后没问题了,虽然问题暂时解决了,没有找到原因还是很闹心的
进行对包含整型变量的list进行操作造成计算错误
问题很简单,可以复现。也可能是太久没接触代码的简单问题。 看了一个短视频,说人类的贫富差距28定律,用计算机随机可以发现是一样的。 想了一下觉得并不难实现,所以想要试一下。 思路是循环创建100个包含name和money字段的对象。 并把它们存进list 取随机坐标的两个对象实现一次money的随机数额的交易。 该交易是单向的,一方减少多少,另一方就增加多少。如果要被减少的一方已经是0,便不操作 代码如下: function start() { var objects=new Array(); for(var i=1;i<101;i++){ var object=new Map() ; object.set('name',i); object.set('money',10); objects.push(object) } //这里是单纯为验证当前数组里money的总和是多少这里输出是正常的10000 var moneysxm=0; for(var w=0;w<objects.length;w++){ moneysxm+=objects[w].get('money') } console.log(moneysxm); for(var z=0;z<$('#f').val();z++){ //随机取两个数 var demo1int=sum(0,99); var demo2int=sum(0,99); //获得随机数字对应的数组对象 var demo1object=objects[demo1int]; var demo2object=objects[demo2int]; //获得对象1的金钱数额 var demo1money=demo1object.get('money'); //获得对象2的金钱数额 var demo2money=demo2object.get('money'); console.log(demo1object.get('name')+'##'+demo1money) console.log(demo2object.get('name')+'##'+demo2money) //当该对象金钱数额为0时不作为 //如果两个对象是同一个时不作为 if(demo1money!=0||demo1int!=demo2int){ //获得符合该对象当前金钱范围内的随机支出数额 var demo1zhichu=sum(1,demo1money); //获得对象1的剩余数额 demo1money-=demo1zhichu; //将对象1剩余数额存入数组 objects[demo1int].set('money',demo1money); //获得对象二获得数额后的总数额 demo2money+=demo1zhichu; //将对象2获得数额后的总数额存入数组 objects[demo2int].set('money',demo2money); } console.log(objects[demo1int].get('name')+'##'+objects[demo1int].get('money')); console.log(objects[demo1int].get('name')+'##'+objects[demo2int].get('money')); } var moneysxm=0; for(var s=0;s<objects.length;s++){ moneysxm+=objects[s].get('money') } console.log(moneysxm); //排序 for(var o=0;o<objects.length;o++){ for(var u=0;u<objects.length;u++){ if(objects[o].get('money')<objects[u].get('money')){ var g=objects[o]; objects[o]=objects[u]; objects[u]=g; } } } setobjects=objects; console.log(setobjects); moneysxm=0; for(var q=0;q<setobjects.length;q++){ moneysxm+=setobjects[q].get('money') } console.log(moneysxm); } function sum (m,n){ var num = Math.floor(Math.random()*(m - n) + n); return num; } #f是一个输入框 输入的是循环次数 ![图片说明](https://img-ask.csdn.net/upload/202002/25/1582578096_764127.jpg) 但是问题这段逻辑感觉并没有什么问题,但是问题却出现了 当主要的对象随机交易这段循环走过之后,money的总量发生了变化,循环次数越多,出错概率越大,越离谱 ![图片说明](https://img-ask.csdn.net/upload/202002/25/1582578268_555800.jpg) 由于之前主要做的后端,之所以用js来试,是因为js不用jdk。但是之前调试前端时也总是出现各种各样的问题,最后我怀疑是又遇到了什么莫名其妙的前端都知道的潜在bug 所以决定用相同的逻辑再用java试一下。 java是强类型的,应该不会再出现这种事情了吧。但是显然,我错了。 public class test1234 { public static void main(String[] args) { ArrayList<persion> arrayList = new ArrayList<persion>(); //创建100个对象 for(int i=1;i<101;i++){ persion persion = new persion(); persion.setName(String.valueOf(i)); persion.setMoney(10); arrayList.add(persion); } for(int z=0;z<1000;z++){ //随机取两个数 int demo1int=sum(0,99); int demo2int=sum(0,99); //获得随机数字对应的数组对象 persion demo1object=arrayList.get(demo1int); persion demo2object=arrayList.get(demo2int); //获得对象1的金钱数额 int demo1money=demo1object.getMoney(); //获得对象2的金钱数额 int demo2money=demo2object.getMoney(); //当该对象金钱数额为0时不作为 if(demo1money!=0){ //获得符合该对象当前金钱范围内的随机支出数额 int demo1zhichu=sum(1,demo1money); //获得对象1的剩余数额 demo1money-=demo1zhichu; //将对象1剩余数额存入数组 demo1object.setMoney(demo1money); //获得对象二获得数额后的总数额 demo2money+=demo1zhichu; //将对象2获得数额后的总数额存入数组 demo2object.setMoney(demo2money); } } int moneysxm=0; for(int s=0;s<arrayList.size();s++){ moneysxm+=arrayList.get(s).getMoney(); } System.out.println(moneysxm); } ![图片说明](https://img-ask.csdn.net/upload/202002/25/1582578602_162708.jpg) java也输出了一些令人害怕的money总量 那么肯定是我犯了什么弱智错误了吧,可无论如何也不知道哪里错了,去网上查,大部分计算错误是由于浮点计算造成的,这个我遇到过,但是整型不涉及二进制的缺陷啊。另外我记得list循环不能对对象操作?好像有这个说法?忘了,
C++ 静态变量指针,常量指针指向堆中内存需要释放吗,会造成内存泄露吗?
#include<iostream> using namespace std; void main() { static int *a =new int(3); const char* a=new char[128]; }
Java:为何事务的实际执行结果与预期不符
``` @Controller @EnableAutoConfiguration public class SampleController { @Autowired private WeiboRepository weiboRepository; @Autowired private TwitterRepository twitterRepository; @RequestMapping("/postWeibo") @ResponseBody public void postWeibo() { Weibo weibo = new Weibo("Weibo"); weiboRepository.save(weibo); postTwitter(); } @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public void postTwitter() { Twitter twitter = new Twitter("Twitter"); twitterRepository.save(twitter); throw new RuntimeException(); } public static void main(String[] args) throws Exception { SpringApplication.run(SampleController.class, args); } } ``` 代码逻辑:添加一条微博的同时添加一条推特,postTwitter手动抛出异常模拟回滚 预期结果:Twitter表由于抛出异常造成回滚,Weibo表正常添加 实际结果:虽抛出异常但Twitter、Weibo表均正常添加 请问我已经设置了@Transactional,事务级别为REQUIRED表明postTwitter会单独开启新的事务,为何实际执行结果与预期不符合呢?
C语言二维数组指针问题
如下两个代码,第一个代码会停止运行,而第二个能得出正确结果。。。这两个代码的不同之处不应该是等价的吗?为什么会造成这种完全相反的结果? ``` #include<stdio.h> void main() { void ave(float *p,int m); float a[3][4]={{65,66,67,68},{78,79,80,71},{54,78,65,54}}; ave(*a,12); } void ave(float *p,int m) { float aver=0; for(;p<(p+m);p++) //与下一个代码的不同之处 aver=aver+(*p); aver=aver/m; printf("平均分为:%4.2f\n",aver); } ``` ``` #include<stdio.h> void main() { void ave(float *p,int m); float a[3][4]={{65,66,67,68},{78,79,80,71},{54,78,65,54}}; ave(*a,12); } void ave(float *p,int m) { float aver=0; float *end=p+m; //与上个代码的不同之处 for(;p<end;p++) aver=aver+(*p); aver=aver/m; printf("平均分为:%4.2f\n",aver); } ```
什么原因造成线程的栈满的呀?
<div class="iteye-blog-content-contain" style="font-size: 14px;"> <p>最近学习C++着,发现C++里面的友元类不错,我就想着能否用java也实现下,如实就在网上找了些资料</p> <p>http://yangdong.iteye.com/blog/907397</p> <p>这上面的方法是对的,但我想用自己的方法去实现,结构报Exception in thread "main" java.lang.StackOverflowError(线程的栈满)</p> <p>这是我的代码</p> <p>Mian类</p> <pre name="code" class="java">public class Main { public static void main(String args[]){ new TrueFriend().call(); } private static void OnlyFriendCanCall(){ System.out.println("this is a friend"); } static class Friend{ public Friend(){ } public void OnlyFriendCanCall( ){ OnlyFriendCanCall(); } } } </pre> <p> 这是 TrueFriend类</p> <pre name="code" class="java">public class TrueFriend extends Main.Friend{ public void call(){ super.OnlyFriendCanCall(); } }</pre> <p>  </p> <p>我想让大家帮我看看是什么原因造成异常的(线程的栈满),谢谢了</p> <p> </p> </div>
Java的线程上锁造成的问题
public class Piao implements Runnable{ Integer p=5; @Override public synchronized void run() { synchronized(p) { if(p>0) { System.out.println("卖出了第"+p+"张票"); p--; } else { System.out.println("没了"); } } } public static void main(String[] args) { Piao c=new Piao (); new Thread(c).start(); new Thread(c).start(); new Thread(c).start(); new Thread(c).start(); new Thread(c).start(); ``` ``` } } 就是这种卖票的问题,如果锁方法;就会让一个线程卖完全部票,如果锁票数,就会出现两个线程卖同一张票的问题,请问怎么处理?
线程池死锁问题,我这样写会造成死锁吗
```java @Slf4j class DeadLock2 { public static void main(String[] args) { ExecutorService pool = Executors.newFixedThreadPool(10); pool.submit(() -> { try{ log.info("First"); pool.submit(() -> log.info("second")).get(); log.info("third"); }catch (InterruptedException | ExecutionException e){ log.error("Error",e); } }); } ``` 执行的结果如下: ![图片说明](https://img-ask.csdn.net/upload/201905/23/1558579747_32400.png)
静态指针动态申请内存
静态指针动态申请内存,定义指针时申请了内存,然后每次满足条件时会释放内存再重新分配内存,但是由于不知道何时会是最后一次重新分配,因此最后一次使用后没有释放内存。请问这样会造成内存泄漏吗? 代码示例如下: ``` void foo(int var){ static int var_save = var; static T* ptr = new T; if (var_save!=var){ delete ptr; var_save = var; ptr = new T; } } int main ( int argc, char* argv[]){ //...... while(1){ //...... foo(var); //...... } return 0; } ```
新手关于使用java集合造成的java.lang.StackOverflowError
如图的题目,![图片说明](https://img-ask.csdn.net/upload/201602/27/1456582254_892569.png) 据此,我写了三个类,第一个Student类,代码: ``` package com.wms.StudentManager2; import java.util.List; public class Student { private String name; private int age; private List crList; public List crList() { return crList; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public List getList() { return crList; } public void setList(List crList) { this.crList = crList; } public Student(String name, int age) { super(); this.name = name; this.age = age; } public Student() {} @Override public String toString() { if(crList==null){ return "Student [name=" + name + ", age=" + age + "该生从未选课"; } return "Student [name=" + name + ", age=" + age + ", course=" + crList + "]"; } } ``` 第二个Course类,代码: ``` package com.wms.StudentManager2; import java.util.List; public class Course { private String name; private int score; private List stuList; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public List getList() { return stuList; } public void setList(List stuList) { this.stuList = stuList; } public Course(String name, int score,List stuList) { super(); this.name = name; this.score = score; this.stuList = stuList; } public Course() {} @Override public String toString() { return "Course [name=" + name + ", score=" + score + ", student=" + stuList + "]"; } } ``` 第三个Manager类,代码: ``` package com.wms.StudentManager2; import java.util.ArrayList; import java.util.List; public class Manager { public static void main(String[] args) { Student s1 = new Student("张小三", 20); Student s2 = new Student("李小思", 19); Student s3 = new Student("王五", 18); Student s4 = new Student("赵晓丽", 19); Student s5 = new Student("黎明", 20); List<Student> stuList1 = new ArrayList<>(); List<Student> stuList2 = new ArrayList<>(); List<Student> stuList3 = new ArrayList<>(); stuList1.add(s1); stuList1.add(s2); stuList1.add(s3); stuList1.add(s4); stuList2.add(s1); stuList3.add(s1); Course c1 = new Course("高等数学", 5, stuList1); Course c2 = new Course("线性代数", 3, stuList2); Course c3 = new Course("离散数学", 4, stuList3); List<Course> crList1 = new ArrayList(); List<Course> crList2 = new ArrayList(); List<Course> crList3 = new ArrayList(); List<Course> crList4 = new ArrayList(); crList1.add(c1); crList1.add(c2); crList1.add(c3); crList2.add(c1); crList3.add(c1); crList4.add(c1); s1.setList(crList1); s2.setList(crList2); s3.setList(crList3); s4.setList(crList4); System.out.println(c1); } } ``` 如果我不给student setCourseList就可以正常,但是一旦set之后就会报java.lang.StackOverflowError, at java.lang.StringBuilder.<init>(Unknown Source) at com.wms.StudentManager2.Student.toString(Student.java:40) at java.lang.String.valueOf(Unknown Source)等等错误。实在不知道问题出在哪里,希望大家帮忙看下。
C++实现链式队列,在Xcode中遇到Thread 1: EXC_BAD_ACCESS (code=1, address=0x8)
代码是链式队列的构建,编译过程没问题,但是运行时提示Thread 1: EXC_BAD_ACCESS (code=1, address=0x8)。请问是什么原因造成的??这个问题已经困扰我很多次了 ![图片说明](https://img-ask.csdn.net/upload/201811/29/1543489395_62101.png) ``` #include <iostream> using namespace std; class qnode{ public: int data; qnode *link; }; class linkquene{ public: void QInit(linkquene &Q); void QInsert(linkquene &Q, int a); void QDelete(linkquene &Q); int isempty(linkquene &Q); void Qshow(linkquene &Q); private: qnode *rear; qnode *front; }; void linkquene::QInit(linkquene &Q) { qnode *p = new qnode; p->link = NULL; Q.front = p; Q.rear = p; } int linkquene::isempty(linkquene &Q) { if(Q.rear == Q.front){ return 1; } else return 0; } void linkquene::QInsert(linkquene &Q, int a) { qnode *n = new qnode; n->link = NULL; n->data = a; Q.rear->link = n; Q.rear = n; } void linkquene::QDelete(linkquene &Q) { qnode *n; n = Q.front->link; Q.front->link = Q.front->link->link; if(Q.rear == n) Q.rear = Q.front; delete n; } void linkquene::Qshow(linkquene &Q) { qnode *p; p = Q.front->link; while(p != NULL) { cout<<p->data<<endl; p = p->link; } } int main(int argc, const char * argv[]) { linkquene q; linkquene *Q; Q = new linkquene; q.QInsert(*Q, 10); q.QDelete(*Q); q.QInsert(*Q, 7); q.QInsert(*Q, 1); q.QInsert(*Q, 8); q.QDelete(*Q); q.Qshow(*Q); return 0; } ```
大一新生求前辈们指教
感觉float和double除了精度,范围不一样其他都没什么区别,输出的小数位数都一样,怎么理解这两个的区别?具体什么时候用哪个? #include <stdio.h> int main(void) { double d; d=1; printf("%d",d); } 用%d输出了一个错误的很大的数,虽然感觉不能这么用%d输出double类型的数,但想知道这个结果是什么原因造成的,用%f和%lf就是一样的,这点上是否没有区别? #include <stdio.h> int main(void) { double d,sum; int x,p; scanf("%d",&x); if (x<5) d=0; else if (x<10) d=0.01; else if (x<21) d=0.02; else if (x<30) d=0.04; else if (30<=x) d=0.06; sum=p*x*(1-d); printf("%g",sum); } 本意是把p当做一个常量来输出,如输入2可以得到2p,但是发现%d,c,s,g都无法使用,用什么或怎么改能够调试成功?
一个关于反射改变final域的问题
代码如下 ``` import java.lang.reflect.Field; class A { private final int a = 1; public void a() { System.out.println(a); } } class B { private final int b; public B(int b) { this.b = b; } public void b() { System.out.println(b); } } public class Test { public static void main(String args[]) throws Exception { A a = new A(); B b = new B(2); Field field_a = A.class.getDeclaredField("a"); Field field_b = B.class.getDeclaredField("b"); field_a.setAccessible(true); field_b.setAccessible(true); field_a.set(a, 520); field_b.set(b, 250); System.out.println(field_a.get(a)); a.a(); System.out.println(field_b.get(b)); b.b(); } } ``` 输出结果: 520 1 250 250 问题来了:为什么两种不一样的初始化final域的方式会造成两种截然不同的效果??
使用RadioGroup设置监听时为啥出现错误,有啥原因造成的
使用RadioGroup设置监听时为啥出现错误,有啥原因造成的 public class MainActivity extends Activity { private static final long WELCOME_SCHEDULE_TIME = 1000 * 5; //对时间的延迟5秒 private RadioGroup radioGroup; private RadioButton rb_home,rb_consult,rb_Myindustry,rb_Myordering; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initListener(); initView(); final Intent intent = new Intent(); Timer timer = new Timer(); TimerTask timerTask = new TimerTask() { @Override public void run() { intent.setClass(MainActivity.this, LoginActivity.class); MainActivity.this.startActivity(intent); finish(); } }; // 延迟5秒后进入主页面 timer.schedule(timerTask, WELCOME_SCHEDULE_TIME); } /** * 控件的获取 */ private void initView() { rb_home= (RadioButton) findViewById(R.id.rb_homepage); rb_consult= (RadioButton) findViewById(R.id.rb_consult); rb_Myordering= (RadioButton) findViewById(R.id.rb_myordering); rb_Myindustry= (RadioButton) findViewById(R.id.rb_myindustry); } /** * 对所在控件监听 */ private void initListener() { radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { if (checkedId==rb_home.getId()) { Intent intent1 = new Intent(MainActivity.this, HomePage.class); startActivity(intent1); } else if (checkedId==rb_consult.getId()){ Intent intent2 = new Intent(MainActivity.this, Consult.class); startActivity(intent2);} else if (checkedId==rb_Myordering.getId()) { Intent intent3 = new Intent(MainActivity.this, Myordering.class); startActivity(intent3); } else if (checkedId==rb_Myindustry.getId()) { Intent intent4 = new Intent(MainActivity.this, Mydustry.class); startActivity(intent4); } } }); } }
线程竞争资源时候有没有先后顺序
假设线程1执行了wait(),线程2获取到了锁资源,与此同时线程3启动执行synchronized竞争锁资源,线程2在结束之前使用了notifyAll()唤醒线程1,那么线程1和线程3谁能获取到锁是随机的吗? 在我的理解中,是随机的,但是现在的实际情况是线程1会获取到资源 请问是我理解错了吗,请说明一下。 还有就是线程1执行了wait之后,线程4先获取到锁资源,但是也执行了wait,然后按照上面的继续进行下去的,在线程2结束的时候,为什么会执行线程1和线程4。 ``` public class ThreadTest { public static void main(String[] args) { Object co = new Object(); System.out.println(co); for (int i = 0; i < 10; i++) { MyThread t = new MyThread("Thread" + i, co); t.start(); } try { TimeUnit.SECONDS.sleep(2); System.out.println("-----Main Thread notify-----"); synchronized (co) { co.notify(); } TimeUnit.SECONDS.sleep(2); System.out.println("Main Thread is end."); } catch (InterruptedException e) { e.printStackTrace(); } } static class MyThread extends Thread { private String name; private Object co; public MyThread(String name, Object o) { this.name = name; this.co = o; } @Override public void run() { System.out.println(name + " is waiting."); try { synchronized (co) { co.wait(); } System.out.println(name + " has been notified."); } catch (InterruptedException e) { e.printStackTrace(); } } } } ``` 比如说这个代码,先不管他会造成死锁,问题是main中那个notify释放的,一定会是第一个执行wait的,难道不是随机的吗??
cin输入不成功,猜测是while循环造成的
//寻找nums中哪两个数相加等于target class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> a; for (int i = 0; i<nums.size(); i++) for (int j = 0; j<nums.size(); j++) if (nums[i] + nums[j] == target) { a.push_back(nums[i]); a.push_back(nums[j]); return a; } return a; } }; void main() { Solution A; vector<int> nums; cout << "please write"; int i,j; while (cin >> i) { nums.push_back(i); } cout << "please write the target:"<<endl; //cin >> j; 这步不成功,直接跳到最后的 system("pause"); for (auto c : A.twoSum(nums, j)) cout << c << " "; system("pause"); }
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具!
作者 | Rocky0429 来源 | Python空间 大家好,我是 Rocky0429,一个喜欢在网上收集各种资源的蒟蒻… 网上资源眼花缭乱,下载的方式也同样千奇百怪,比如 BT 下载,磁力链接,网盘资源等等等等,下个资源可真不容易,不一样的方式要用不同的下载软件,因此某比较有名的 x 雷和某度网盘成了我经常使用的工具。 作为一个没有钱的穷鬼,某度网盘几十 kb 的下载速度让我...
讲真,这两个IDE插件,可以让你写出质量杠杠的代码
周末躺在床上看《拯救大兵瑞恩》 周末在闲逛的时候,发现了两个优秀的 IDE 插件,据说可以提高代码的质量,我就安装了一下,试了试以后发现,确实很不错,就推荐给大家。 01、Alibaba Java 代码规范插件 《阿里巴巴 Java 开发手册》,相信大家都不会感到陌生,其 IDEA 插件的下载次数据说达到了 80 万次,我今天又贡献了一次。嘿嘿。 该项目的插件地址: https://github....
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
C语言荣获2019年度最佳编程语言
关注、星标公众号,不错过精彩内容作者:黄工公众号:strongerHuang近日,TIOBE官方发布了2020年1月编程语言排行榜单。我在前面给过一篇文章《2019年11月C语言接近Ja...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
应届生/社招面试最爱问的几道Java基础问题
本文已经收录自笔者开源的 JavaGuide: https://github.com/Snailclimb (【Java学习 面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识)如果觉得不错的还,不妨去点个Star,鼓励一下! 一 为什么 Java 中只有值传递? 首先回顾一下在程序设计语言中有关将参数传递给方法(或函数)的一些专业术语。按值调用(call by value)表...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
最全最强!世界大学计算机专业排名总结!
我正在参与CSDN200进20,希望得到您的支持,扫码续投票5次。感谢您! (为表示感谢,您投票后私信我,我把我总结的人工智能手推笔记和思维导图发送给您,感谢!) 目录 泰晤士高等教育世界大学排名 QS 世界大学排名 US News 世界大学排名 世界大学学术排名(Academic Ranking of World Universities) 泰晤士高等教育世界大学排名 中国共...
一份王者荣耀的英雄数据报告
咪哥杂谈本篇阅读时间约为 6 分钟。1前言前一阵写了关于王者的一些系列文章,从数据的获取到数据清洗,数据落地,都是为了本篇的铺垫。今天来实现一下,看看不同维度得到的结论。2环境准备本次实...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
【蘑菇街技术部年会】程序员与女神共舞,鼻血再次没止住。(文末内推)
蘑菇街技术部的年会,别开生面,一样全是美女。
那个在阿里养猪的工程师,5年了……
简介: 在阿里,走过1825天,没有趴下,依旧斗志满满,被称为“五年陈”。他们会被授予一枚戒指,过程就叫做“授戒仪式”。今天,咱们听听阿里的那些“五年陈”们的故事。 下一个五年,猪圈见! 我就是那个在养猪场里敲代码的工程师,一年多前我和20位工程师去了四川的猪场,出发前总架构师慷慨激昂的说:同学们,中国的养猪产业将因为我们而改变。但到了猪场,发现根本不是那么回事:要个WIFI,没有;...
立即提问