javajava并发编程实战问题

如果系统中开启了IPV6协议(比如window7),java网络编程经常会获取到IPv6的地址,这明显不是我们想要的结果,搜索发现很多蹩脚的做法是:禁止IPv6协议。其实查看官方文档有详细的说明:
java.net.preferIPv4Stack (default: false)
If IPv6 is available on the operating system the underlying native socket
will be an IPv6 socket. This allows Java(tm) applications to connect too, and
accept connections from, both IPv4 and IPv6 hosts.
If an application has a preference to only use IPv4 sockets then this
property can be set to true. The implication is that the application will not be
able to communicate with IPv6 hosts.
在实际的运用中有以下几种办法可以实现指定获取IPv4的地址:
1. 在java启动命令中增加一个属性配置:-Djava.net.preferIPv4Stack=true
java -Djava.net.preferIPv4Stack=true -cp .;classes/ michael.net.TestInetAddress
java -Djava.net.preferIPv6Addresses=true -cp .;classes/ michael.net.TestInetAddress
java -Djava.net.preferIPv4Stack=true -cp .;classes/ michael.net.TestInetAddress&java -Djava.net.preferIPv6Addresses=true -cp .;classes/ michael.net.TestInetAddress
2.在java程序里设置系统属性值如下:
package michael.
import java.net.InetA
* @author Michael
public class TestInetAddress {
* @param args
public static void main(String[] args) throws Exception {
// 注释指定系统属性值
// System.setProperty("java.net.preferIPv4Stack", "true");
// System.setProperty("java.net.preferIPv6Addresses", "true");
System.out.println("-------InetAddress.getLocalHost()");
InetAddress addr = InetAddress.getLocalHost();
System.out.println("HostName := " + addr.getHostName());
System.out.println("HostAddress := " + addr.getHostAddress());
System.out.println("-------InetAddress.getByName(\"\")");
InetAddress addr2 = InetAddress.getByName("");
System.out.println("HostName := " + addr2.getHostName());
System.out.println("HostAddress := " + addr2.getHostAddress());
1234567891011121314151617181920212223242526272829
package michael.net;&import java.net.InetAddress;&/** * @blog
* @author Michael */public class TestInetAddress {&&&&&/**&&&& * @param args&&&& */&&&&public static void main(String[] args) throws Exception {&&&&&&&&// 注释指定系统属性值&&&&&&&&// System.setProperty("java.net.preferIPv4Stack", "true");&&&&&&&&// System.setProperty("java.net.preferIPv6Addresses", "true");&&&&&&&&System.out.println("-------InetAddress.getLocalHost()");&&&&&&&&InetAddress addr = InetAddress.getLocalHost();&&&&&&&&System.out.println("HostName := " + addr.getHostName());&&&&&&&&System.out.println("HostAddress := " + addr.getHostAddress());&&&&&&&&&System.out.println("-------InetAddress.getByName(\"\")");&&&&&&&&InetAddress addr2 = InetAddress.getByName("");&&&&&&&&System.out.println("HostName := " + addr2.getHostName());&&&&&&&&System.out.println("HostAddress := " + addr2.getHostAddress());&&&&&}}
java.net.preferIPv4Stack=true 运行结果如下:
——-InetAddress.getLocalHost()
HostName := Michael-PC
HostAddress := 10.7.246.163
——-InetAddress.getByName(&#”)
HostName :=
HostAddress := 173.254.28.17
java.net.preferIPv6Addresses=true
运行结果如下:
——-InetAddress.getLocalHost()
HostName := Michael-PC
HostAddress := fe80:0:0:0:6518:85da:8690:16eb%13
——-InetAddress.getByName(&#”)
HostName :=
HostAddress := 173.254.28.17
3.tomcat Web容器
可在 catalina.bat 或者 catalina.sh 中增加如下环境变量即可:
SET CATALINA_OPTS=-Djava.net.preferIPv4Stack=true
原创文章,转载请注明: 转载自[
本文链接地址:
- 79,875 views - 63,882 views - 40,138 views - 32,031 views - 30,859 views - 29,568 views - 29,331 views - 26,337 views - 19,019 views - 18,462 views
2015年八月 &(1)
2015年三月 &(5)
2015年二月 &(3)
2015年一月 &(12)
2014年十二月 &(4)
2014年十一月 &(3)
2014年七月 &(1)
2014年五月 &(1)
2014年四月 &(12)
2014年三月 &(4)
2014年二月 &(6)
2014年一月 &(8)
2013年十二月 &(1)
2013年十月 &(9)
2013年九月 &(7)
2013年八月 &(8)
2013年六月 &(4)
2013年五月 &(4)
2013年四月 &(3)
2013年三月 &(10)
2013年二月 &(1)
2013年一月 &(2)
2012年十二月 &(1)
2012年十一月 &(7)
2012年十月 &(2)
2012年九月 &(4)
2012年八月 &(13)
2012年七月 &(14)
2012年六月 &(12)
2012年五月 &(15)
2012年四月 &(20)
2012年三月 &(22)
2012年二月 &(86)
标签云(3D)
WP Cumulus Flash tag cloud by
9 or better.关于Java编程问题!一、 如果一个整数的各位数之和能被9整除,则这个数也能被9整除.编程判断一个整数N是否能被9整除.其 中,N由键盘输入.二、 铁路运货的运费与路程的远近及货物的质量有关,设价目表如下 :不足100千米,每吨每千米为0.1元;100千米以上,不足300千米,每吨每千米为0.9元;300千米以上,不足500千米,每吨每千米为0.8元;500千米以上,不足1000千米,每吨每千米为0.7元;1000千米以上,每吨每千米为0.6元;编一程序,要求从键盘输入货物的质量和路程,可以计算其相应的运费.
小丙wan1708
以下是题1的代码public
class Test { public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int input = scanner.nextInt();
boolean flag =
int temp = 0;
while(input%10>0){
temp += input%10;
input = input/10;
temp = temp +
if(temp%9==0){
System.out.println(flag?"能整除":"不能整除"); }}以下是题2的代码public class Test1 { public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入路程");
int km = scanner.nextInt();
double price = new Test1().getprice(km);
System.out.println("单价/吨:"+price);
System.out.println("请输入重量(T)");
int h = scanner.nextInt();
System.out.println("价格为:"+(price*h)); }
public double getprice(int km){
double price = 0;
if(km=100&&km=300&&km=500&&km
为您推荐:
其他类似问题
扫描下载二维码2062人阅读
今天面试时HR问我一个关于数据库性能调优的问题,对于我的回答引发了她的另一个问题:Java 10大低级错误 知不知道?这个在以前公司的时候还真的提过这个问题,但是我实在是、、、在网上搜了一下,拿来分享一下,原文链接:http://blog.csdn.net/tianhangsky/article/details/6521800
为了规范大家的编程行为,借鉴前人的编程经验,避免低级错误的不断发生,特发布MDSP产品Java十大低级错误,供所有Java开发人员学习。
2Java十大低级错误
1、类、方法、变量、常量等命名不能表达具体的含义,或者表达的含义和实际用途不一致。
2、缺少类、方法注释,代码修改后没有同步修改注释。
3、日志和实际情况不一致;捕获异常后没有在日志中记录异常栈。
4、魔鬼数字。
5、空指针异常。
6、数组下标越界。
7、将字符串转换为数字时没有捕获NumberFormatException异常。
8、对文件、IO、数据库等资源进行操作后没有及时、正确进行释放。
9、循环体编码时不考虑性能,循环体中包含不需要的重复逻辑。
10、数据类没有重载toString()方法。
3解读&案例
3.1命名规范性
在代码中,类、方法、变量、常量等的名称是帮助理解代码最直观的要素。命名良好、逻辑简洁的代码可以达到自注释的目的,通过阅读代码就可以基本理解业务逻辑,减少编写和维护注释的工作量。在编码时必须重视命名的规范性,名称应该简洁、容易理解,能够准确表达所命名对象的含义。临时变量的名称应该符合常用的习惯(如for循环的整形循环子一般使用i、j)。
下面就是一个命名规范性不好的例子:
void notifyProduct(Integer productId)
&&& if (productId ==
&&&&&&& throw
new monError.PARAM_NULL,
&product ID is null&);
&&& ProductService prodSrv = (ProductService) ServiceLocator.findService(ProductService.class);
&&& ProductServiceStruct product = prodSrv.queryProduct(productId);
&&& if (product ==
&&&&&&& throw
new monError.PARAM_ERROR,
&product not exist&);
&&& if (PMSConfig.getInstance().getConfig1())&&&&&&&&&&
// getConfig1没有具体含义
&&&&&&& NotifyService sss1 = (NotifyService) ServiceLocator.findService(NotifyService.class);
&&&&&&& sss1.notifyProduct(product);
&&&&&&& if (PMSConfig.getInstance().getNotifyWisg())&&&
// getNotifyWisg名称和实际含义不一致
&&&&&&&&&&& MdspProductExtService sss2 = (MdspProductExtService) ServiceLocator.findService(MdspProductExtService.class);
&&&&&&&&&&& List&MdspProductExt& eee1 = sss2.queryProductExtInfo(productId);
&&&&&&&&&&& sss1.notifyProductExtInfo(eee1);
&&&&&&& // sss1、sss2、eee1没有任何含义,理解困难
如果采用规范、能表达含义的名称,代码就变得非常容易理解:
void notifyProduct(Integer productId)
&&& if (productId ==
&&&&&&& throw
new monError.PARAM_NULL,
&product ID is null&);
&&& ProductService prodSrv = (ProductService) ServiceLocator.findService(ProductService.class);
&&& ProductServiceStruct product = prodSrv.queryProduct(productId);
&&& if (product ==
&&&&&&& throw
new monError.PARAM_ERROR,
&product not exist&);
&&& if (PMSConfig.getInstance().isNeedNotifyProduct())
&&&&&&& NotifyService notifySrv = (NotifyService) ServiceLocator.findService(NotifyService.class);
&&&&&&& notifySrv.notifyProduct(product);
&&&&&&& if (PMSConfig.getInstance().isNeedNotifyProductExtInfo())
&&&&&&&&&&& MdspProductExtService prodExtSrv = (MdspProductExtService) ServiceLocator.findService(MdspProductExtService.class);
&&&&&&&&&&& List&MdspProductExt& prodExtInfos = prodExtSrv.queryProductExtInfo(productId);
&&&&&&&&&&& notifySrv.notifyProductExtInfo(prodExtInfos);
3.2注释规范性
注释是帮助理解代码的重要资料,缺少必要的注释,可能需要浪费大量的时间阅读、调试代码,才能真正理解代码的逻辑,造成巨大的浪费,也会给维护代码带来很多困难。但注释也不是越多约好,在没有必要写注释的地方写冗余注释,或者不规范、甚至和代码逻辑不一致的注释,会给理解代码造成严重的干扰,不如不写。
类注释和方法注释应该按照编程规范的规定编写。方法注释需要说明方法入参含义、取值范围、可否为空、是否会被方法修改,以及方法返回值的含义、能否为空等情况。
对于方法中的注释,建议通过良好的命名规范、代码结构和统一的缩进风格,尽量使代码自注释,只在代码无法完全表达业务逻辑的地方添加必要的注释。以代码为主,注释为辅。修改代码时应同步修改注释,杜绝注释和代码不一致的情况。
&* &一句话功能简述&。
&* &功能详细描述&
&* // 没有方法注释,应该将自动生成的注释模板删除,添加有意义的类注释
publicvoid sendMsg()
&* 根据内容ID和产品类型查询产品列表。
&* @param内容ID&&&&&&&
// 能否为null?如果为null如何处理? contentId
&* @param产品类型&&&
// 都有哪些类型?能否为null?为null如何处理? productType
&* @return产品列表&&&&&&&&&&&&&&&&
// 如果没有查到,是返回空List还是返回null?
public List&ProductServiceStruct& queryProduct(String contentId, String productType)
&&& if (PRODUCT_TYPE_SUB.equals(productType))
&&&&&&& //
查询点播类产品
&&&&&&& // 注释和代码不一致
&&&&&&& return querySubProduct(contentId);
&&& returnnull;
&* 根据内容ID查询订购类产品列表。
&* @param contentId
内容ID,不能为null
&* @return产品列表,如果没有返回空List
public List&ProductServiceStruct& querySubProduct(String contentId)
&&& return ...;
3.3日志规范性
日志是定位问题时最重要的依据,业务流程中缺少必要的日志会给定位问题带来很多麻烦,甚至可能造成问题完全无法定位。
异常产生后,必须在日志中以ERROR或以上级别记录异常栈,否则会导致异常栈丢失,无法确认异常产生的位置。并不需要在每次捕获异常时都记录异常日志,这样可能导致异常被多次重复记录,影响问题的定位。但异常发生后其异常栈必须至少被记录一次。
和注释一样,日志也不是越多越好。无用的冗余日志不但不能帮助定位问题,还会干扰问题的定位。而错误的日志更是会误导问题,必须杜绝。
下面的例子虽然打印了很多日志,但基本上都是无用的日志,难以帮助定位问题。甚至还有错误的日志会干扰问题的定位:
void saveProduct1(ProductServiceStruct product)
&&& log.debug(&enter method: addProduct()&);
&&& log.debug(&check product status&);
&&& if (product.getProduct().getProductStatus() != ProductFieldEnum.ProductStatus.RELEASE)
&&&&&&& throw
new PMSException(PMSErrorCode.Product.ADD_ERROR);
&&& log.debug(&check tariff&);
&&& BooleanResult result = checkTariff(product.getTariffs());
&&& if (!result.getResult())
&&&&&&& throw
new PMSException(PMSErrorCode.Product.ADD_ERROR);
&&& log.debug(&before add product&);
&&& ProductService prodSrv = (ProductService) ServiceLocator.findService(ProductService.class);
&&&&&&& prodSrv.addProduct(product);
&&& catch (BMEException e)
&&&&&&& // 未记录异常栈,无法定位问题根源
&&& log.debug(&after add product&);
&&& log.debug(&exit method: updateProduct()&);&//
错误的日志
而下面的例子日志打印的不多,但都是关键信息,可以很好的帮助定位问题:
void saveProduct2(ProductServiceStruct product)
&&& if (product.getProduct().getProductStatus() != ProductFieldEnum.ProductStatus.RELEASE)
&&&&&&& log.error(
&&&&&&&&&&&&&&&
&product status &
&&&&&&&&&&&&&&& + product.getProduct().getProductStatus()
&&&&&&&&&&&&&&& +
& error, expect & + ProductFieldEnum.ProductStatus.RELEASE);
&&&&&&& throw
new PMSException(PMSErrorCode.Product.ADD_ERROR);
&&& BooleanResult result = checkTariff(product.getTariffs());
&&& if (!result.getResult())
&&&&&&& log.error(
&&&&&&&&&&&&&&&
&check product tariff error &
&&&&&&&&&&&&&&& + result.getResultCode()
&&&&&&&&&&&&&&& +
&&&&&&&&&&&&&&& + result.getResultDesc());
&&&&&&& throw
new PMSException(PMSErrorCode.Product.ADD_ERROR);
&&& ProductService prodSrv = (ProductService) ServiceLocator.findService(ProductService.class);
&&&&&&& prodSrv.addProduct(product);
&&& catch (BMEException e)
&&&&&&& log.error(&add product error&, e);
&&&&&&& throw
new PMSException(PMSErrorCode.Product.ADD_ERROR, e);
3.4魔鬼数字
在代码中使用魔鬼数字(没有具体含义的数字、字符串等)将会导致代码难以理解,应该将数字定义为名称有意义的常量。
将数字定义为常量的最终目的是为了使代码更容易理解,所以并不是只要将数字定义为常量就不是魔鬼数字了。如果常量的名称没有意义,无法帮助理解代码,同样是一种魔鬼数字。
在个别情况下,将数字定义为常量反而会导致代码更难以理解,此时就不应该强求将数字定义为常量。
void addProduct(ProductServiceStruct product)
&&& // 魔鬼数字,无法理解3具体代表产品的什么状态
&&& if (product.getProduct().getProductStatus() != 3)
&&&&&&& throw
new PMSException(PMSErrorCode.Product.ADD_ERROR);
&&& BooleanResult result = checkTariff(product.getTariffs());
&&& if (!result.getResult())
&&&&&& &throw
new PMSException(PMSErrorCode.Product.ADD_ERROR);
void addProduct2(ProductServiceStruct product)
&&& // 仍然是魔鬼数字,无法理解NUM_THREE具体代表产品的什么状态
&&& if (product.getProduct().getProductStatus() !=
NUM_THREE)
&&&&&&& throw
new PMSException(PMSErrorCode.Product.ADD_ERROR);
&&& BooleanResult result = checkTariff(product.getTariffs());
&&& if (!result.getResult())
&&&&&&& throw
new PMSException(PMSErrorCode.Product.ADD_ERROR);
下面的例子中虽然将数字定义为了常量,但代码却并不容易理解:
&* 获取将子窗口绘制在父窗口中间时,子窗口的坐标。
&* @param父窗口的位置 parentWindow
&* @param子窗口的位置 clientWindow
&* @return子窗口在父窗口中间时的坐标
public Point getDrawCenter1(Rect parentWindow, Rect clientWindow)
&&& Point drawCenter =
new Point();
&&& drawCenter.x = parentWindow.x + (parentWindow.width
- clientWindow.width) /
HALF_SIZE_DIV;
&&& drawCenter.y = parentWindow.y + (parentWindow.height
- clientWindow.height) /
HALF_SIZE_DIV;
&&& return drawC
直接使用数字,代码反而更容易理解:
&* 获取将子窗口绘制在父窗口中间时,子窗口的坐标。
&* @param父窗口的位置 parentWindow
&* @param子窗口的位置 clientWindow
&* @return子窗口在父窗口中间时的坐标
public Point getDrawCenter2(Rect parentWindow, Rect clientWindow)
&&& Point drawCenter =
new Point();
&&& drawCenter.x = parentWindow.x + (parentWindow.width
- clientWindow.width) / 2;
&&& drawCenter.y = parentWindow.y + (parentWindow.height
- clientWindow.height) / 2;
&&& return drawC
3.5空指针异常
空指针异常是编码过程中最常见的异常,在使用一个对象的时候,如果对象可能为空,需要先判断对象是否为空,再使用这个对象。
在进行常量和变量的相等判断时,建议将常量定义为Java对象封装类型(如将int类型的常量定义为Integer类型),这样在比较时可以将常量放在左边,调用equals方法进行比较,可以省去不必要的判空。
class NullPointer
&&& static
final Integer RESULT_CODE_OK = 0;
&&& static
final Result RESULT_OK =
new Result();
&&& public
void printResult(Integer resultCode)
&&&&&&& Result result = getResult(resultCode);
&&&&&&& // result可能为null,造成空指针异常
&&&&&&& if (result.isValid())
&&&&&&&&&&& print(result);
&&& public Result getResult(Integer resultCode)
&&&&&&& // 即使resultCode为null,仍然可以正确执行,减少额外的判空语句
&&&&&&& if (RESULT_CODE_OK.equals(resultCode))
&&&&&&&&&&& return
RESULT_OK;
&&&&&&& return
&&& public
void print(Result result)
&&&&&&& ...
3.6下标越界
访问数组、List等容器内的元素时,必须首先检查下标是否越界,杜绝下标越界异常的发生。
publicclass ArrayOver
&&& publicvoid checkArray(String name)
&&&&&&& //
获取一个数组对象
&&&&&&& String[] cIds = ContentService.queryByName(name);
&&&&&&& if(null != cIds)
&&&&&&&&&& // 只是考虑到cids有可能为null的情况,但是cids完全有可能是个0长度的数组,因此cIds[0]有可能数组下标越界
&&&&&&&&&&& String cid=cIds[0];
&&&&&&&&&&& cid.toCharArray();
3.7字符串转数字
调用Java方法将字符串转换为数字时,如果字符串的格式非法,会抛出运行时异常NumberFormatException。
错误例子:
public Integer getInteger1(String number)
&&& // 如果number格式非法,会抛出NumberFormatException
&&& return Integer.valueOf(number);
正确的处理方法如下:
public Integer getInteger2(String number)
&&&&&&& return Integer.valueOf(number);
&&& catch (NumberFormatException e)
&&&&&&& ...
&&&&&&& return
3.8资源释放
在使用文件、IO流、数据库连接等不会自动释放的资源时,应该在使用完毕后马上将其关闭。关闭资源的代码应该在try...catch...finally的finally内执行,否则可能造成资源无法释放。
错误案例如下:
void writeProduct1(ProductServiceStruct product)
&&&&&&& FileWriter fileWriter = new FileWriter(&&);
&&&&&&& fileWriter.append(product.toString());
&&&&&&& // 如果append()抛出异常,close()方法就不会执行,造成IO流长时间无法释放
&&&&&&& fileWriter.close();
&&& catch (IOException e)
&&&&&&& ...
关闭IO流的正确方法如下:
void writeProduct2(ProductServiceStruct product)
&&& FileWriter fileWriter = null;
&&&&&&& fileWriter = new FileWriter(&&);
&&&& &&&fileWriter.append(product.toString());
&&& catch (IOException e)
&&&&&&& ...
&&& finally
&&&&&&& // 不管前面是否发生异常,finally中的代码一定会执行
&&&&&&& if (fileWriter !=
&&&&&&&&&&& try
&&&&&&&&&&& {
&&&&&&&&&&&&&&& fileWriter.close();
&&&&&&&&&&& }
&&&&&&&&&&& catch (IOException e)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& ...
&&&&&&&&&&& }
3.9循环体性能
循环体是软件中最容易造成性能问题的地方,所以在进行循环体编码时务必考虑性能问题。
在循环体内重复使用且不会变化的资源(如变量、文件对象、数据库连接等),应该在循环体开始前构造并初始化,避免在循环体内重复和构造初始化造成CPU资源的浪费。
除非业务场景需要,避免在循环体内构造try...catch块,因为每次进入、退出try...catch块都会消耗一定的CPU资源,将try...catch块放在循环体之外可以节省大量的执行时间。
void addProducts(List&ProductServiceStruct& prodList)
&&& for (ProductServiceStruct product : prodList)
&&&&&&& // prodSrv在每次循环时都会重新获取,造成不必要的资源消耗
&&&&&&& ProductService prodSrv = (ProductService) ServiceLocator.findService(ProductService.class);
&&&&&&& // 避免在循环体内try...catch,放在循环体之外可以节省执行时间
&&&&&&& try
&&&&&&&&&&& prodSrv.addProduct(product);
&&&&&&& catch (BMEException e)
&&&&&&&&&&& ...
3.10&数据类重载toString()方法
3.10.1解读
数据类如果没有重载toString()方法,在记录日志的时候会无法记录数据对象的属性值,给定位问题带来困难。
3.10.2案例
class MdspProductExt
&&& private String
&&& private String
&&& public String getKey()
&&&&&&& return
&&& public
void setKey(String key)
&&&&&&& this.key =
&&& public String getValue()
&&&&&&& return
&&& public
void setValue(String value)
&&&&&&& this.value =
class BusinessProcess
&&& private DebugLog
log = LogFactory.getDebugLog(BusinessProcess.class);
&&& public
void doBusiness(MdspProductExt prodExt)
&&&&&&& try
&&&&&&&&&&& ...
&&&&&&& catch (PMSException e)
&&&&&&&&&&& // MdspProductExt未重载toString()方法,日志中无法记录对象内属性的值,只能记录对象地址
&&&&&&&&&&& log.error(&error while process prodExt & + prodExt);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:170146次
积分:1507
积分:1507
排名:第19293名
原创:28篇
转载:35篇
评论:34条
(5)(4)(6)(3)(1)(6)(1)(2)(13)(1)(6)(5)(1)(5)(4)1.编写静态方法public static boolean isPrime(int x),当正整数x为素数时返回true,否则返回false。(仅能被1和自身整除的正整数称为素数,但1除外。)2.编写一个静态方法public static String rightAlign(char[][] x),返回二维字符型数组x表示的字符阵所连成的字符串s,数组x的一行结束时要求换行,(换行符为'\n')且每行的内容为右边对齐。例如对于char[][] c = {{'A','B','2','C'},{'M','\u0020','E'},{'9','-','1','1','N'}}返回的字符串为(不计字符格式):AB2CM E9-11N
public static boolean isPrime(int x) {
boolean flag =
if (x & 2) {
for (int i = 2; i &= Math.sqrt(x); i++) {
if (x % i == 0) {
public static String rightAlign(char[][] x) {
String result = "";
if (x != null && x.length & 0) {
// 计算每行内容最大的长度
int maxLine = 0;
for (int i = 0; i & x. i++) {
for (int j = 0; j & x[i]. j++) {
if (x[i].length & maxLine) {
maxLine = x[i].
for (int i = 0; i & x. i++) {
if (x[i].length & maxLine) {
int a = maxLine - x[i].
for (int k = 0; k & k++) {
result += " ";
for (int j = 0; j & x[i]. j++) {
result += x[i][j];
result += "\n";
已被提问者采纳
你还没有登录,请先登录或注册慕课网帐号
这位童鞋很懒,什么也没有留下~~!
public static String rightAlign(char[][] x){
String result = "";
int maxLength = 0;
for(char[] c:x){//遍历二维数组,找出数组中的最大长度
if(c.length & maxLength)
maxLength = c.
for (char[] c: x){//遍历二维数组
for(int i = 0; i & maxLength - c. i++){//如果数组的长度比最大长度小,在此前面补空格,实现右对齐
result += " ";
for(char car: c){//遍历一维数组
result += "\n";
你还没有登录,请先登录或注册慕课网帐号
老师,有java系列的框架教程吗?
1.public static boolean isPrime(int x){if(x==1){}else if(x&1){}
else{for(int i = 2;i&i/1.3;i++){
if(x%i==0){}}}}
你还没有登录,请先登录或注册慕课网帐号
我很懒,什么也不会留下!
public static String rightAlign(char[][] x){
String result = "";
int maxLength = 0;
for(char[] c:x){
if(c.length & maxLength)
maxLength = c.
for (char[] c: x){
for(int i = 0; i & maxLength - c. i++){
result += " ";
for(char car: c){
result += "\n";
你还没有登录,请先登录或注册慕课网帐号
58799人关注
Copyright (C)
All Rights Reserved | 京ICP备 号-2

我要回帖

更多关于 java编程常见问题 的文章

 

随机推荐