java 如何用javadowhile循环环打出到三角

提供企业信息化整体解决方案
Java while循环语句处理关键环节的技巧
Java while循环语句处理关键环节的技巧
| 作者:慧都控件网 |
11:39:31| 阅读 0次
概述:这里我们将讨论 handleConnection() 方法的结构,这个方法生成一个新的 Thread 来处理每个连接。我们将分两部分讨论这个问题。这一屏我们将着重该方法本身,然后在下一屏研究该方法所使用的 ConnectionHandler 助手类的结构。
  Java while循环语句会有很多重要的环节都使用到。下面我们就来看看相关的问题解决方案和相关的代码。希望大家在之后的学习和生活中能更好的使用Java while循环语句。
  这里我们将讨论 handleConnection() 方法的结构,这个方法生成一个新的 Thread 来处理每个连接。我们将分两部分讨论这个问题。这一屏我们将着重该方法本身,然后在下一屏研究该方法所使用的 ConnectionHandler 助手类的结构。
  Java代码
 1.public&void&handleConnection(Socket&connectionToHandle)&{
  2.new&Thread(new&ConnectionHandler(connectionToHandle)).
  start();
  4.public&void&handleConnection(Socket&connectionToHandle)&{
  5.new&Thread(new&ConnectionHandler(connectionToHandle)).
  start();
  我们对 RemoteFileServer 所做的大改动就体现在这个方法上。我们仍然在服务器接受一个连接之后调用 handleConnection() ,但现在我们把该 Socket 传递给 ConnectionHandler 的一个实例,它是 Runnable 的。我们用 ConnectionHandler 创建一个新 Thread 并启动它。ConnectionHandler 的 run() 方法包含Socket 读/写和读 File 的代码,这些代码原来在 RemoteFileServer 的 handleConnection() 中。
  4. 处理连接:第 2 部分
  这里是 ConnectionHandler 类的结构:
  Java代码
 7.import&java.io.*;
  8.import&java.net.*;
  9.public&class&ConnectionHandler&implements&Runnable{
  10.Socket&socketToH
  11.public&ConnectionHandler(Socket&aSocketToHandle)&{
  12.socketToHandle&=&aSocketToH
  14.public&void&run()&{
  17.import&java.io.*;
  18.import&java.net.*;
  19.public&class&ConnectionHandler&implements&Runnable{
  20.Socket&socketToH
  21.public&ConnectionHandler(Socket&aSocketToHandle)&{
  22.socketToHandle&=&aSocketToH
  24.public&void&run()&{
  这个助手类相当简单。跟我们到目前为止的其它类一样,我们导入 java.net 和 java.io 。该类只有一个实例变量 socketToHandle ,它保存由该实例处理的 Socket 。类的构造器用一个 Socket 实例作参数并将它赋给 socketToHandle 。
  请注意该类实现了 Runnable 接口。实现这个接口的类都必须实现 run() 方法,我们的类就是这样做的。稍后我们将探究 run() 的细节。现在只需知道它将实际处理连接,所用的代码跟我们先前在 RemoteFileServer 类中看到的是一样的。
  &实现 run()
  这里我们实现 run() 方法,它将攫取我们的连接的流,用它来读写该连接,并在任务完成之后关闭它:
  Java代码
  26.public&void&run()&{
  27.try&{
  28.PrintWriter&streamWriter&=&new&PrintWriter(socketToHandle.getOutputStream());
  29.BufferedReader&streamReader&=
  30.new&BufferedReader(new&InputStreamReader(socketToHandle.getInputStream()));
  31.String&fileToRead&=&streamReader.readLine();
  32.BufferedReader&fileReader&=&new&BufferedReader(new&FileReader(fileToRead));
  33.String&line&=&
  34.while&((line&=&fileReader.readLine())&!=&null)
  35.streamWriter.println(line);
  36.fileReader.close();
  37.streamWriter.close();
  38.streamReader.close();
  39.}&catch&(Exception&e)&{
  40.System.out.println(&Error&handling&a&client:&&&+&e);
  43.public&void&run()&{
  44.try&{
  45.PrintWriter&streamWriter&=&new&PrintWriter(socketToHandle.getOutputStream());
  46.BufferedReader&streamReader&=
  47.new&BufferedReader(new&InputStreamReader(socketToHandle.getInputStream()));
  48.String&fileToRead&=&streamReader.readLine();
  49.BufferedReader&fileReader&=&new&BufferedReader(new&FileReader(fileToRead));
  50.String&line&=&
  51.while&((line&=&fileReader.readLine())&!=&null)
  52.streamWriter.println(line);
  53.fileReader.close();
  54.streamWriter.close();
  55.streamReader.close();
  56.}&catch&(Exception&e)&{
  57.System.out.println(&Error&handling&a&client:&&&+&e);
  ConnectionHandler的 run() 方法所做的事情就是 RemoteFileServer 上的 handleConnection() 所做的事情。首先,我们把 InputStream 和 OutputStream 分别包装(用 Socket 的 getOutputStream() 和 getInputStream() )进 BufferedReader 和 PrintWriter 。然后我们用这些代码逐行地读目标文件:
  Java代码
 60.FileReader&fileReader&=&new&FileReader(new&File(streamReader.readLine()));
  61.BufferedReader&bufferedFileReader&=&new&BufferedReader(fileReader);
  62.String&line&=&
  63.while&((line&=&bufferedFileReader.readLine())&!=&null)&{
  64.streamWriter.println(line);
  66.FileReader&fileReader&=&new&FileReader(new&File(streamReader.readLine()));
  67.BufferedReader&bufferedFileReader&=&new&BufferedReader(fileReader);
  68.String&line&=&
  69.while&((line&=&bufferedFileReader.readLine())&!=&null)&{
  70.streamWriter.println(line);
  请记住我们应该从客户机获取一条有效的文件路径,这样用该路径名构造一个新 File ,把它包装进 FileReader 以处理读文件的操作,然后把它包装进 BufferedReader 以让我们逐行地读该文件。我们在 Java while循环语句中调用 BufferedReader 上的 readLine() 直到不再有要读的行。请记注,对 readLine() 的调用将造成阻塞,直到有字节来到为止。我们获取一些字节之后就把它们放到本地的 line 变量中,然后写出到客户机上。完成读写操作之后,我们关闭打开的流。
慧都控件|提供软件技术整体解决方案
云集全球三千余款优秀控件、软件产品,提供行业领先的咨询、培训与开发服务
企业QQ:|电话:023-
服务与支持
重庆 / 023-
北京 / 010-
400-700-1020
慧都科技有限公司 版权所有 Copyright 2003-
400-700-1020
<input type="hidden" id="url" value=""/>用java的for或者while循环做一个等腰三角形 - ITeye问答
用java的for或者while循环做一个等腰三角形
&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&& *
&&&&&& ***
&&&&& *****
&&&& *******
&&& *********
首先要有一个参数,即等腰三角形的高度h,然后根据h计算第i层打印的字符数量n以及开始位置s,接着把n和s作为参数传给执行打印的方法printchars(s,n);
例:
------*------
----*-*-*----
--*-*-*-*-*--
*-*-*-*-*-*-*
以最后一行的字符数为准,最后一行的字符数应该是2h-1,字符之间的空格数(事例中是“-”)是2h-1-1,所以总字符数是4h-3,也就是每一行的长度是4h-3。第i层的字符数量为2i-1,开始位置是2(h-i)。
已解决问题
未解决问题Java Socket语句在使用的时候有很多时候都需要我们注意小语法的使用,其中While循环就是一个,这个程序只是简单的两台计算机之间的通讯.如果是多个客户同时访问一个服务器呢?你可以试着再运行一个客户端,结果是会抛出异常的.那么多个客户端如何实现呢?
其实,简单的分析一下,就可以看出客户和服务通讯的主要通道就是Java Socket语句本身.而服务器通过accept方法就是同意和客户建立通讯.这样当客户建立Java Socket语句的同时.服务器也会使用这一根连线来先后通讯.那么既然如此只要我们存在多条连线就可以了.那么我们的程序可以变为如下:
import java.io.*;
import java.net.*;
public class MyServer {
public static void main(String[] args) throws IOException{
ServerSocket server=new ServerSocket(5678);
while(true){
Socket client=server.accept();
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out=new PrintWriter(client.getOutputStream());
while(true){
String str=in.readLine();
System.out.println(str);
out.println("has receive....");
out.flush();
if(str.equals("end"))
client.close();
这里仅仅只是加了一个外层的While循环.这个循环的目的就是当一个客户进来就为它分配一个Java Socket语句直到这个客户完成一次和服务器的交互,这里也就是接受到客户的"End"消息.那么现在就实现了多客户之间的交互了.但是.问题又来了.这样做虽然解决了多客户,可是是排队执行的.也就是说当一个客户和服务器完成一次通讯之后下一个客户才可以进来和服务器交互.无法做到同时服务.那么要如何才能同时达到既能相互之间交流又能同时交流呢?很显然这是一个并行执行的问题了.所以线程是最好的解决方案.
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至: 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。
沙龙活动 | 3月31日 京东、微博实战专家与你共同探讨容器技术实践!
多代理路径寻找(Multi-agent path找不到答案?
java中 使用while(Scanner.hasNextIn())出现死循环
需求是:通过键盘随意输入几个数字,然后转变成数组,并排序问题:while(Scanner.hasNextInt())停不下来,一直等待输入,试过以字母、符号结尾,但是都不能让循环停下来。请各位大大们解疑释惑,或者是有更好的方法能够实现这个需求么?
按投票排序
按时间排序
<dd id="vote_num_
想要输入结束必须发送一个“输入中止的信号”,即“EOF”字符在windows上就是在控制台上使用Ctrl+Z在Unix、Linux下在控制台输入Ctrl+D
<dd id="vote_num_
hasNext()这个方法是如果此扫描器的输入中有另一个标记,则返回 true。在等待要扫描的输入时,此方法可能阻塞。扫描器将不执行任何输入。所以循环会一直下去。此情况可以设置一个终止符,调用hasNext()的重载方法hasNext(String patten):如果下一个标记与从指定字符串构造的模式匹配,则返回 true。扫描器不执行任何输入。
你需要在循环中调用arr[i++] = scanner.nextInt();或者scanner.next();让它读取下一个数否则判断来判断去,都是判断的第一个。
登录后可回答问题,请
阿里云移动APP解决方案,助力开发者轻松应对移动app中随时可能出现的用户数量的爆发式增长、复杂的移动安全挑战等...
消息队列(Message Queue,简称MQ)是阿里云商用的专业消息中间件,是企业级互联网架构的核心产品,基于...
是基于语音识别、语音合成、自然语言理解等技术,为企业在多种实际应用场景下,赋予产品“能听、会说、懂你”式的智能人...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...做一个java相关的程序:当不停地输入数据当碰到字母exit时,程序结束终止录入,用while循环
按时间排序
&#47;&#47; 这里我对你的程序进行了修改,利用了substring();截取字符串来完成,有什么不懂的就import java.util.Spublic class Main{ public static boolean equals(String str){
&#47;&#47;**我们在这里来判断是否退出
if(&exit&.equals(str.trim())){
System.out.println(&退出系统&);
System.exit(1);
} }public static void main(String[] args) throws Exception{ &#47;&#47;a,b用来存储两个整数;len用来存储输入的表达式长度;result用来存储运算结果
int a=0,b=0,len=0,result=0;
String str=
&#47;&#47;str用来存储输入的表达式
String s[]=new String[2];
&#47;&#47;数组s[]用来存储拆分表达式后的结果
char c=&#39; &#39;;
&#47;&#47;c用来存储运算符
System.out.println(&请输入算术表达式或指令:&);
Scanner scan=new Scanner(System.in);
str=scan.nextLine();
&#47;&#47;从键盘上获取用户输入的表达式; while (equals(str)) &#47;&#47;循环条件 {
&#47;&#47;将输入的信息拆分出两个整数和运算符,再根据运算符计算结果,并输出
int f = 0;
&#47;&#47; 0表示+,1表示-,2表示*,3表示&#47;
if(str.indexOf(&+&)!=-1){
&#47;&#47;判断是什么符号
s[0] = str.substring(0,str.indexOf(&+&));
s[1] = str.substring(str.indexOf(&+&)+1);
}else if(str.indexOf(&-&)!=-1){
s[0] = str.substring(0,str.indexOf(&-&));
s[1] = str.substring(str.indexOf(&-&)+1);
}else if(str.indexOf(&*&)!=-1){
s[0] = str.substring(0,str.indexOf(&*&));
s[1] = str.substring(str.indexOf(&*&)+1);
}else if(str.indexOf(&&#47;&)!=-1){
s[0] = str.substring(0,str.indexOf(&&#47;&));
s[1] = str.substring(str.indexOf(&&#47;&)+1);
int A=0,B=0;
&#47;&#47;来接受输入的两个数
A = Integer.parseInt(s[0]);
B = Integer.parseInt(s[1]);
switch(f){
System.out.println(A + &+& + B + &=& + (A+B));
System.out.println(A + &-& + B + &=& + (A-B));
System.out.println(A + &*& + B + &=& + (A*B));
System.out.println(A + &&#47;& + B + &=& + (A&#47;B));
}catch(Exception e){
System.out.println(&除数不能为0&);
System.out.println(&请输入算术表达式或指令:&);
str=scan.nextLine();
第一部分:!str.equals(&exit&)第二部分:char op = 0;int num1 =int num2 =String[] temp =if(str.indexOf(&#39;+&#39;)&0) {op = &#39;+&#39;; temp = str.split(&&#92;&#92;+&);}else if(str.indexOf(&#39;-&#39;)&0) {op = &#39;-&#39;; temp = str.split(&&#92;&#92;-&);}else if(str.indexOf(&#39;*&#39;)&0) {op = &#39;*&#39;; temp = str.split(&&#92;&#92;*&);}else if(str.indexOf(&#39;&#92;&#92;&#47;&#39;)) {op = &#39;&#47;&#39;; temp = str.split(&&#92;&#92;&#47;&);}num1 = Integer.parseInt(temp[0]);num2 = Integer.parseInt(temp[1]);int result = 0;if(op == &#39;+&#39;) {result = num1 + num2;}else if(op==&#39;-&#39;) {result = num1 - num2;}else if(op == &#39;*&#39;) { result = num1 * num2;}else if(op == &#39;&#47;&#39;) {result = num1 &#47; num2;}System.out.println(num1+&&+op+num2+&=&+result);
填写的内容是:!str.equals(&exit&);回答完毕
while(str.equals(&exit&))
感谢您为社区的和谐贡献力量请选择举报类型
经过核实后将会做出处理感谢您为社区和谐做出贡献
确定要取消此次报名,退出该活动?
请输入私信内容:

我要回帖

更多关于 java循环语句while 的文章

 

随机推荐