java web问题,解决以后,绝对给你最高分。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java web问题,解决以后,绝对给你最高分。相关的知识,希望对你有一定的参考价值。

前前后后我的小项目还是写了有2个月了。基本功能都达到了预期效果,但现在有三个问题没什么太好的办法,求思路和实现代码!,
我的数据处理方式是,servlet查询数据库,做成二维数组,然后传递给jsp页面,在jsp页面上循环打印,包括<tr></tr>和<td></td>都在循环之中。

两个问题,
1分页
考虑用循序定一个固定的下标,加判断,翻页就加倍数下标,显示当然还是页面。郁闷的是,这个翻页和上面的对应不起来。

2筛选

这个基本等于没有办法,我的数据已经由servlet做成二维数组了,如果要在当前页面做筛选效果,那我当期页面需要交互?不会吧。我不知道怎么处理!

3刷新
当前页的刷新如何处理,数据需要重新获取,是前一个servlet传过来的。这个该怎么办了?

菜鸟求救·····高人飞来啊!
惭愧了,大家都说的很好,我很感激,可惜分数只能给一个人,我又提了一个问题大家看下吧!http://zhidao.baidu.com/question/393719063.html?quesup2&oldq=1

看了你的问题,其实你应该用数据库来解决,行标号和列标号分别用一个字段存储,这样便于用SQL语句查询,当然你存到二维数组里也是可以的。那么就针对你的问题来说吧:
1,分页:
应该能对应的,你怎么写的,用JSTL的<c:forEach>标签么?没看到代码不好说
2,筛选:
和当前页面交互,可以考虑把行号(二维数组的第一维)传回来,然后再在servlet里根据筛选关键字进行搜索。
3,刷新:
刷新不怕,有session呢,你把数据都存在session里,刷新也不会丢的。也可以用request.getAttribute, setAttribute进行,但是跳转的时候一定要用request.getRequestDispatcher("***.jsp").forward(request, response)来处理,这样也不会丢数据(你刷新时浏览器比如ie会提示是否重新提交表单,要选择“是”),否则内容会丢。追问

首先说声谢谢!
但是我很菜啊,
1,分页,我就是for(int i=0; i 大概就这么写的。显示20行,我的思路是,点击下一页的时候,将i加20,就变成i=40,i<60但是实际操作有难度!
2.你的意思是,jsp——servlet——jsp页面这样吗?
3.我这个之所以要刷新,就是因为数据库中的数据发生改变了,但是页面上没有变,所有刷新!

追答

1,这样是可以的,不出来是不是因为你这个变量 i 的值设置的不对?既然你一开始都把二维数组取出来的,那么应该知道共有几页。当你点第几页的那个链接时,就把当前页面记录下来(比如这个数是page,从0开始编号,如果是上一页下一页的那种链接,可以考虑在session中记录这个page变量,然后+1或-1),然后for(int j=0;j<s[page].length;j++) ,因为你是显示当前页的,不用循环嵌套。思路就是这样,你可以调试的。

2,是的,筛选需要做的逻辑比较复杂,放到servlet里比较好,否则jsp里太乱了。

3,哦,这个是我理解错了你的意思,数据发生改变,必须要重新提交了,否则是不会成功的,这只能把当前行号传过去,然后再重新取一遍,更新你的二维数组。(刚才看到下面你说jsp使用window.location.reload(); 这是不行的,除非你的取数据的逻辑写在jsp里,就相当于jsp里的取数据逻辑又执行了一遍更新了二维数组,否则浏览器是不会替你把数据传过去,重新刷新的)

追问

嗯,第二搞定了!
第一个也可以仿照,jsp传递页号-servlet做相应加减,传递新的数组-jsp显示!不过还有一个小问题,请给个建议,记录这个页号用什么控件了,上一页或者下一页用什么了,我用的最多的就是text这里,很明显用不了!
然后就最后一个问题,有办法吗?
估计也只有向上面仿照了!

追答

祝贺你解决了两个问题。其实用session里面存这个页号最好,一开始访问页面存0,后面用按钮上一页下一页的servlet逻辑里面就对应把它-1或+1(当然你要判断是不是小于0或大于全部页码了)。其实不知道你是不是还提供了输入页码转过去的功能,这个就可以了。

参考技术A 1:是在数据库中查询出全部数据,放入内存。然后分页
2:每次点击下一页,进入数据库中查找数据(也就是根据数据库查询限制出你的数据)
从你的内容看,是第一种情况吧。这个也很好做判断。比如每页10条数据。页数是pn,每页显示n条数据。可以和你的数组对应。
1页(pn-1)*n到(pn*n-1)条数据 在数组中取0-9数据
2页(pn-1)*n到(pn*n-1)条数据 在数组中取 10-19
3页(pn-1)*n到(pn*n-1)条数据 在数组中取20-29
依次类推你应该知道了吧
参考技术B 看了楼主的问题,不是非常的明白,不过还是有一点点看法
1:分页,按楼主的那个逻辑应该是可以的,比如说先查下标0-9的数据,然后是10-19.。。。依次类推,我刚简单试了一下应该可以,你最好把显示的结果放在div中每次翻页的时候清空再从数组中取数据加载
2:筛选,如果分页可以的话,那筛选就也可以,道理是同样的,只不过在数组中根据条件检索里面的数据罢了。
3:刷新,如果把数据放在div中,每次清空div,然后又从数组中取出重新加载,用js事件控制,如果这样可以不刷新的,而如果想作其他操作,建议楼主用ajax异步请求。追问

其他不说,第3个,我的数组都变了,怎么重新加载了?
数组来源于servlet,servlet查询数据库。在jsp页面上有个弹出按钮,我点击以后,会把sql中数据删除,但是当前窗口值没变

追答

用ajax传一个页面的方式可以做到既不刷新页面,同时也改变页面状态

参考技术C 1、分页问题主要是两个参数,一个是offest,也就是页面数,一个是页面数据个数。利用这两个数就可以计算当前页面的数据。
2、筛选,这个应该在数据库查询的where语句里面做,如果要在页面做的话就需要把不匹配的指定行tr的的CSS样式的display属性指定为non,就不显示了。
3、刷新,Servlet向JSP做页面传递的时候不要用Redirect,要用requestDispatcher的forward方法,这样的你的页面地址就是Servlet的地址,刷新就不会出问题了。
参考技术D 这里针对你的第一个和第二个问题建议你去看一下JSTL标签会有帮助,其中C标签肯定管用,因为C标签不仅能够做出循环还能在循环时做嵌套及数据筛选和判断。第三个问题很简单,将那个数据设成session的,request.getSession().setAttribute(arg0, arg1);不要直接用request.setAttribute(arg0, arg1),因为这个数据请求的有效时间太短,用session的话就整个回话期内都可以获得了,这个只是给你一个建议,也不需要你给分了,学习嘛,总是要自己学出来的才管用,别人写给你的总不是自己掌握的,看你还是学的很认真的。 第5个回答  2012-03-09 好ikfujmcg

具有最高薪水问题的贪心算法?

【中文标题】具有最高薪水问题的贪心算法?【英文标题】:Greedy Algorithm with Maximum Salary Problem? 【发布时间】:2021-11-23 17:38:18 【问题描述】:

我正在尝试解决以下问题。我认为我的解决方案运行良好。但是,我尝试上传解决方案的系统不接受我的解决方案。可能有些测试失败了。我可以知道我错过了什么吗?

问题是:

作为成功面试的最后一个问题,你的老板会给你几张纸,上面有数字,并要求你从这些数字中组成一个最大的数字。得到的数字将是你的薪水,所以你对最大化这个数字非常感兴趣。你怎么能这样做?

示例 1

输入

2

21 2

输出:221

示例 2

输入

3

23 39 92

输出:923923

我的解决方案是:

function MaxSallary(nums) 
  let maxSize = Math.max(...nums).toString().length;
  let newArr = [];

  nums.map((num) => 
    while (num.toString().length < maxSize) 
      num = num.toString().concat(num.toString().split("").slice(-1)[0]);
    

    newArr.push(Number(num));
  );

  finalArr = [];
  while (newArr.length > 0) 
    let minIndex = newArr.indexOf(Math.max(...newArr));
    newArr.splice(minIndex, 1);
    finalArr.push(...nums.splice(minIndex, 1));
  
  return finalArr.join("");


console.log(MaxSallary([2, 12, 34, 11, 43, 21, 5]));

【问题讨论】:

我猜这样的自动化测试工具需要MaxSallary 将计算出的工资作为数字返回而不是打印出来?至于实际的算法本身,我觉得 sort+join 应该以某种方式完成。 我编辑了代码,但情况和以前一样。请给我你的解决方案好吗? 重复python - Constructing the largest number possible by rearranging a list - Stack Overflow ...编程语言除外 【参考方案1】:

您想知道应该以什么顺序连接数字,以便一旦解析回数字,结果是可能的最高值。改写成这样,看来我们应该先对数组进行排序。

当比较两个数字ab时,要知道哪个应该先出现,我们需要知道$a$b$b$a之间的which one is higher:

.sort((a, b) => parseInt(`$b$a`, 10) - parseInt(`$a$b`, 10)))

.sort mutates the array(并返回它),所以我首先是cloning it。

function MaxSallary(nums) 
  const salary = [...nums]
    .sort((a, b) => parseInt(`$b$a`, 10) - parseInt(`$a$b`, 10))
    .join("");
  return salary;


console.log(MaxSallary([21, 2]));
console.log(MaxSallary([23, 39, 92]));
console.log(MaxSallary([2, 12, 34, 11, 43, 21, 5]));

【讨论】:

输出为:Your output: 9.999999998888888e+108 Correct output: 9999999998888888888887777777776666666666555555554444444443333333333222222222111111111111111101010101010101010 @CihatŞaman 他们似乎想要一个字符串作为输出,而不是一个数字。尝试直接删除最后的parseIntreturn salary; 如果我使用以下数组作为您和我的解决方案的输入,输出会略有不同。 let testVal = [37, 21, 4, 86, 42, 54, 81, 53, 76, 37, 16, 63, 6, 15, 58, 93, 73, 43, 85, 2,39, 14, 63, 62, 29, 12, 56, 95, 24, 98, 95, 77, 55, 95, 28, 96, 81, 20, 47, 21, 2, 92, 87, 52, 52, 67, 73, 93, 68, 9, 2, 94, 65, 57, 89, 64, 50, 83, 16, 99, 52, 64, 100, 28, 94, 71, 58, 13, 64, 6, 56, 79, 42, 90, 75, 97, 29, 59, 32, 1, 10, 45, 50]; 如果您检查两个解决方案的数组,您会看到最后 2 位数字不同?真的,我想知道为什么输出不一样。 或者只是const maxSalary = (xs) =&gt; xs .map (String) .sort () .reverse () .join ('')

以上是关于java web问题,解决以后,绝对给你最高分。的主要内容,如果未能解决你的问题,请参考以下文章

java求两个数差的绝对值,统统给你解决!

高分求教:如何实现java web 按钮点击弹出登陆界面,并登陆

java web项目 相对路径怎么写

普通JAVA类 如何获取,WEB项目的根路径

java多线程访问被限制问,高分求助 高手给个思路或方法

关于java web的new File(),如果用绝对路径就可以用,如果用相对路径就有问题了,没把错也读不出来