一条java基础面试题,求教高手 第三行是 (ab,c),(d,e,f),(g,h,i) 没有规律吧 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第三行应该是(a,b,c),(d,e,f),(g,h,i),......这其实就是找规律:已知数组char[] chArr = {a,b,...,i};第一行打印的时候,()内只打印1个字母,第二行打印2个,以此类推;通用规律就是第i(i从0开始)行打印(i+1)个字母(且用逗号分隔),且不超过chArr的字母个数限制。LZ好好想想吧。 第三行应该是(a,b,c),(d,e,f),(g,h,i),......打入时漏了,我也是和楼上一样理解的,只是自己实现不了:-I 写了一个通用的方法,可以指定输出的字符范围,比如指定 9 就是说输出 'a' 至 'a' + 9 - 1public static String output(int charRange) { StringBuilder sb = new StringBuilder(); for (int i = 1; i <= charRange; i++) { for (char c = 'a'; c < 'a' + charRange; c++) { if ((c - 'a') % i == 0) { sb.append("("); } sb.append(c); if ((c + 1 - 'a') % i == 0 && c != ('a' + charRange - 1)) { sb.append("),"); } if (c == ('a' + charRange - 1)) { sb.append(")"); } } sb.append("\n"); } return sb.toString();}测试 main 函数public static void main(String[] args) { System.out.println(output(9)); } 这个是输出(a),(b),(c),(d),(e),(f),(g),(h),(i)(ab),(cd),(ef),(gh),(i)(abc),(def),(ghi)(abcd),(efgh),(i)(abcde),(fghi)(abcdef),(ghi)(abcdefg),(hi)(abcdefgh),(i)(abcdefghi) 上面的代码里使用了 char 类型,虽然说在 Java 里最好不要直接使用 char 类型,但你这个问题只涉及ASCII中的英文字符,所以不会出现什么问题 自己写了个 逗号问题纠结了好久public static void main(String[] args) { char[] arr = {'a','b','c','d','e','f','g','h','i'}; int length = arr.length; int len; int m = 0; int k = 0; int n; for(int i=0; i<length; i++) { if(length%(i+1) == 0) { len = length/(i+1); } else { len = length/(i+1) + 1; } for(int j=m=0; j<len; j++,m=m+i+1) { n = 0; System.out.print("("); for(k=m ; k<m+i+1; k++) { if(k == length) { break; } System.out.print(arr[k]); if(k != length-1) { if(n < i) { System.out.print(","); n++; } } } System.out.print(")"); if(j != len-1) { System.out.print(","); } } System.out.println(); } }输出:(a),(b),(c),(d),(e),(f),(g),(h),(i)(a,b),(c,d),(e,f),(g,h),(i)(a,b,c),(d,e,f),(g,h,i)(a,b,c,d),(e,f,g,h),(i)(a,b,c,d,e),(f,g,h,i)(a,b,c,d,e,f),(g,h,i)(a,b,c,d,e,f,g),(h,i)(a,b,c,d,e,f,g,h),(i)(a,b,c,d,e,f,g,h,i) public class Test1 { public static void main(String[] args) { output('a', 'i'); } private static void output(char start, char end) { int count = end - start + 1; int add = 1; for (int i = 0; i < count; ++i, ++add) { for (int j = 0; j < count; j += add) { System.out.print("("); for (int k = j; k < Math.min(j + add, count); ++k) { System.out.print((char) (start + k)); } System.out.print(")"); if(j + add < count) { System.out.print(","); } } System.out.println(); } }} public static void main(String[] args) { String str = ""; int start = 0; int end = 0; for (int j = 0; j < 9; j++) { start = 0; end = j + 1; for (int i = 0; i < 9; i++) { String s = "abcdefghi"; if (end > s.length()) { if (start == Math.min(s.length(), end)) break; str += "("; str += s.substring(start, Math.min(s.length(), end)) + (")"); break; } else { str += "("; str += s.substring(start, end) + (")"); } start = end; end = end + 1 + j; } str += "\n"; } System.out.println(str); } 楼上都分享了这么多了,我也给楼主分享一版吧:public class TestString { public static void main(String[] args) { String value = "abcdefghi"; printfStr(value); } /** * 打印字符串 * * @param str */ private static void printfStr(String str) { int length = str.length(); StringBuilder temp = new StringBuilder(); for (int i = 1; i <= length; i++) { // 间隔是i for (int j = 0; j < length; j += i) { // 求截取子字符串的尾下标 int max = ((j + i >= length) ? length : (j + i)); temp.append(organizeStr(str.substring(j, max))); } // 在两个括号间插入逗号 System.out.println(temp.toString().replace(")(", "),(")); temp.delete(0, temp.length()); // 清空容器 } } /** * 组织字符串,如abc转换为a,b,c * * @param str * 要转换的字符串 * @return 返回转换后的结果 */ private static String organizeStr(String str) { StringBuilder value = null; // 两个长度以上时才添加逗号 if (str.length() > 1) { value = new StringBuilder(str); value.insert(1, ","); /* * 判断是否是最后一个字符前的逗号 * 如:a,b,c:length = 5,lastIndexOf(",") = 3,退出循环 */ while (value.lastIndexOf(",") < value.length() - 2) { int insertIndex = value.lastIndexOf(",") + 2; value.insert(insertIndex, ","); } } return "(" + (value == null ? str : value.toString()) + ")"; }} public static void main(String[] args) { char[] arr = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i' }; for (int i = 1; i <= 9; i++) { System.out.print("("); for (int j = 1; j <= 9; j++) { System.out.print(arr[j - 1]); if (j % i == 0 && j!=9) { System.out.print("),("); }else if(j!=9){ System.out.print(","); } } System.out.println(")"); } } 各位都是大神啊,五花八门的都有,结果打印出来就知道了,正所谓java的思维是活的在各位身上验证了#^_^# system.out.println("(a),(b),(c),(d),(e),(f),(g),(h),(i)");... public static void main(String[] args) { char[] chars = {'a','b','c','d','e','f','g','h','i'}; StringBuffer sb = new StringBuffer(); for(int i=1;i<=chars.length;i++){ sb.append(getFormatString(chars,i)).append("\n"); } System.out.println(sb); } private static String getFormatString(char[] chars, int index) { StringBuffer sb = new StringBuffer(); for(int i=1;i<=chars.length;i+=index){ sb.append("("); for(int j=i;j<i+index;j++){ if(j<=chars.length){ sb.append(chars[j-1]).append(","); } } if(sb.toString().endsWith(",")){ sb.deleteCharAt(sb.toString().lastIndexOf(",")); } sb.append("),"); } String str = sb.toString(); return str.substring(0, str.lastIndexOf(',')); } 可能先写的有点乱public class Test1 { public static void main(String[] args) { String str = "abcdefghi"; String strTemp = ""; for(int line=1;line <=str.length();line++){ int start = 0; for(int i=1;i<=((str.length()%line==0)? str.length()/line : str.length()/line+1);i++){ if((start+line)<=str.length() ){ strTemp = str.substring(start,(start+line)); }else{ strTemp = str.substring(start,str.length()); } if(i!=((str.length()%line==0)? str.length()/line : str.length()/line+1)){ System.out.print("(" + strTemp + ")," ); }else{ System.out.print("(" + strTemp + ")" ); } start += line; } System.out.println(); } }} 这个感觉使用brute force的方式写出来,不清晰。建议将数据与显示分离。下面使用其它语言给个例子,它先求出数据,再显示数据。这个语言写这样的程序,不需要循环的:#lang racket;;http://bbs.csdn.net/topics/390642252(define (splitList aList size result) (cond [ (>= size (length aList) ) (reverse (cons aList result ))] [else (splitList (list-tail aList size) size (cons (take aList size) result))]));; Tests;(splitList l1 5 empty);'((a b c d e));(splitList l1 4 empty);''((a b c d) (e));(splitList l1 3 empty);'((a b c) (d e));(splitList l1 2 empty);'((a b) (c d) (e));(splitList l1 1 empty);'((a) (b) (c) (d) (e))(define (makeSubLists aList size result) (cond [(= size 0) result] [else (makeSubLists aList (- size 1) (cons (splitList aList size empty) result) )]))(define (showMultiItemsList aList) (display "(") (map (lambda (item) (display item) (display ",")) (reverse (rest (reverse aList)))) (display (first (reverse aList))) (display ")"));; Tests;(showMultiItemsList '(a b c));(a,b,c)(define (showResult aList) (map (lambda (item) (cond [(> (length item) 1) (showMultiItemsList item) ] [else (display item) ]) (display ",") ) (reverse (rest (reverse aList)))) (cond [(> (length (first (reverse aList))) 1) (showMultiItemsList (first (reverse aList)))] [else (display (first (reverse aList)))] ) (displayln "") );; Tests(define aList '(a b c d e f g h i))(define result (makeSubLists aList (length aList) empty))(define null (map showResult result));;result:#|(a),(b),(c),(d),(e),(f),(g),(h),(i)(a,b),(c,d),(e,f),(g,h),(i)(a,b,c),(d,e,f),(g,h,i)(a,b,c,d),(e,f,g,h),(i)(a,b,c,d,e),(f,g,h,i)(a,b,c,d,e,f),(g,h,i)(a,b,c,d,e,f,g),(h,i)(a,b,c,d,e,f,g,h),(i)(a,b,c,d,e,f,g,h,i)|# 我也献丑了,思路是向“a,b,c,d,e,f,g,h,i”里加括号public static void main(String args[]){ String string = "a,b,c,d,e,f,g,h,i"; int size = (string.length() - 1) / 2 + 1; for(int i = 1; i <= 9; i++){ StringBuffer buffer = new StringBuffer(string); int len = (size % i == 0) ? size / i : size / i + 1; int index = 0; for(int j = 0; j < len - 1; j++){ buffer.insert( (2 * i) * j + index++, '('); buffer.insert((2 * i) * j + index++ + (2 * i - 1), ')'); } buffer.insert((2 * i) * (len - 1) + index++, '('); buffer.append(")"); System.out.println(buffer); } } 重发一遍public static void main(String args[]){ String string = "a,b,c,d,e,f,g,h,i"; int size = (string.length() - 1) / 2 + 1; for(int i = 1; i <= 9; i++){ StringBuffer buffer = new StringBuffer(string); int len = (size % i == 0) ? size / i : size / i + 1; int index = 0; for(int j = 0; j < len - 1; j++){ buffer.insert( (2 * i) * j + index++, '('); buffer.insert((2 * i) * j + index++ + (2 * i - 1), ')'); } buffer.insert((2 * i) * (len - 1) + index++, '('); buffer.append(")"); System.out.println(buffer); } } mousereleased事件的一个疑问 帮忙看看,这个程序如何简单化 有人开发过基于P2P的网络电视软件吗? 用response将一个excel文件输出到客户端,如何实现? 整型对象的数组如何转变为整数数组? jtable的刷新问题 請問如何用java實現將一個文件複製到另外一個地方呢﹖謝謝﹗ java字符拼接中的字符带引号时返回结果异常疑问 哪里有Java函数手册DOWMLOAD? 广州有没有公司使用java作为主要的开发工具? eclipse编译的class消失了 BufferedOutputStream代替DataOutputStream?
已知数组char[] chArr = {a,b,...,i};
第一行打印的时候,()内只打印1个字母,第二行打印2个,以此类推;
通用规律就是第i(i从0开始)行打印(i+1)个字母(且用逗号分隔),且不超过chArr的字母个数限制。LZ好好想想吧。
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= charRange; i++) {
for (char c = 'a'; c < 'a' + charRange; c++) {
if ((c - 'a') % i == 0) {
sb.append("(");
}
sb.append(c);
if ((c + 1 - 'a') % i == 0 && c != ('a' + charRange - 1)) {
sb.append("),");
}
if (c == ('a' + charRange - 1)) {
sb.append(")");
}
}
sb.append("\n");
}
return sb.toString();
}
测试 main 函数public static void main(String[] args) {
System.out.println(output(9));
}
(ab),(cd),(ef),(gh),(i)
(abc),(def),(ghi)
(abcd),(efgh),(i)
(abcde),(fghi)
(abcdef),(ghi)
(abcdefg),(hi)
(abcdefgh),(i)
(abcdefghi)
char[] arr = {'a','b','c','d','e','f','g','h','i'};
int length = arr.length;
int len;
int m = 0;
int k = 0;
int n;
for(int i=0; i<length; i++) {
if(length%(i+1) == 0) {
len = length/(i+1);
} else {
len = length/(i+1) + 1;
}
for(int j=m=0; j<len; j++,m=m+i+1) {
n = 0;
System.out.print("(");
for(k=m ; k<m+i+1; k++) {
if(k == length) {
break;
}
System.out.print(arr[k]);
if(k != length-1) {
if(n < i) {
System.out.print(",");
n++;
}
}
}
System.out.print(")");
if(j != len-1) {
System.out.print(",");
}
}
System.out.println();
}
}
输出:(a),(b),(c),(d),(e),(f),(g),(h),(i)
(a,b),(c,d),(e,f),(g,h),(i)
(a,b,c),(d,e,f),(g,h,i)
(a,b,c,d),(e,f,g,h),(i)
(a,b,c,d,e),(f,g,h,i)
(a,b,c,d,e,f),(g,h,i)
(a,b,c,d,e,f,g),(h,i)
(a,b,c,d,e,f,g,h),(i)
(a,b,c,d,e,f,g,h,i)
public class Test1 { public static void main(String[] args) {
output('a', 'i'); } private static void output(char start, char end) {
int count = end - start + 1;
int add = 1;
for (int i = 0; i < count; ++i, ++add) {
for (int j = 0; j < count; j += add) {
System.out.print("(");
for (int k = j; k < Math.min(j + add, count); ++k) {
System.out.print((char) (start + k));
}
System.out.print(")");
if(j + add < count) {
System.out.print(",");
}
}
System.out.println();
}
}
}
String str = "";
int start = 0;
int end = 0;
for (int j = 0; j < 9; j++) {
start = 0;
end = j + 1;
for (int i = 0; i < 9; i++) {
String s = "abcdefghi";
if (end > s.length()) {
if (start == Math.min(s.length(), end))
break;
str += "(";
str += s.substring(start, Math.min(s.length(), end))
+ (")");
break;
} else {
str += "(";
str += s.substring(start, end) + (")");
}
start = end;
end = end + 1 + j;
}
str += "\n";
}
System.out.println(str);
}
public class TestString { public static void main(String[] args) {
String value = "abcdefghi";
printfStr(value);
} /**
* 打印字符串
*
* @param str
*/
private static void printfStr(String str) {
int length = str.length();
StringBuilder temp = new StringBuilder(); for (int i = 1; i <= length; i++) { // 间隔是i
for (int j = 0; j < length; j += i) { // 求截取子字符串的尾下标
int max = ((j + i >= length) ? length : (j + i));
temp.append(organizeStr(str.substring(j, max)));
} // 在两个括号间插入逗号
System.out.println(temp.toString().replace(")(", "),("));
temp.delete(0, temp.length()); // 清空容器
}
} /**
* 组织字符串,如abc转换为a,b,c
*
* @param str
* 要转换的字符串
* @return 返回转换后的结果
*/
private static String organizeStr(String str) {
StringBuilder value = null; // 两个长度以上时才添加逗号
if (str.length() > 1) {
value = new StringBuilder(str);
value.insert(1, ","); /*
* 判断是否是最后一个字符前的逗号
* 如:a,b,c:length = 5,lastIndexOf(",") = 3,退出循环
*/
while (value.lastIndexOf(",") < value.length() - 2) {
int insertIndex = value.lastIndexOf(",") + 2;
value.insert(insertIndex, ",");
}
}
return "(" + (value == null ? str : value.toString()) + ")";
}
}
public static void main(String[] args) {
char[] arr = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i' };
for (int i = 1; i <= 9; i++) {
System.out.print("(");
for (int j = 1; j <= 9; j++) {
System.out.print(arr[j - 1]);
if (j % i == 0 && j!=9) {
System.out.print("),(");
}else if(j!=9){
System.out.print(",");
}
}
System.out.println(")");
}
}
...
public static void main(String[] args) {
char[] chars = {'a','b','c','d','e','f','g','h','i'};
StringBuffer sb = new StringBuffer();
for(int i=1;i<=chars.length;i++){
sb.append(getFormatString(chars,i)).append("\n");
}
System.out.println(sb);
} private static String getFormatString(char[] chars, int index) {
StringBuffer sb = new StringBuffer(); for(int i=1;i<=chars.length;i+=index){
sb.append("(");
for(int j=i;j<i+index;j++){
if(j<=chars.length){
sb.append(chars[j-1]).append(",");
}
}
if(sb.toString().endsWith(",")){
sb.deleteCharAt(sb.toString().lastIndexOf(","));
}
sb.append("),");
}
String str = sb.toString();
return str.substring(0, str.lastIndexOf(','));
}
public class Test1 {
public static void main(String[] args) {
String str = "abcdefghi";
String strTemp = "";
for(int line=1;line <=str.length();line++){
int start = 0;
for(int i=1;i<=((str.length()%line==0)? str.length()/line : str.length()/line+1);i++){
if((start+line)<=str.length() ){
strTemp = str.substring(start,(start+line));
}else{
strTemp = str.substring(start,str.length());
} if(i!=((str.length()%line==0)? str.length()/line : str.length()/line+1)){
System.out.print("(" + strTemp + ")," );
}else{
System.out.print("(" + strTemp + ")" );
}
start += line;
}
System.out.println();
}
}}
下面使用其它语言给个例子,它先求出数据,再显示数据。这个语言写这样的程序,不需要循环的:
#lang racket
;;http://bbs.csdn.net/topics/390642252
(define (splitList aList size result)
(cond [
(>= size (length aList) ) (reverse (cons aList result ))]
[else
(splitList
(list-tail aList size) size
(cons (take aList size) result))]));; Tests
;(splitList l1 5 empty);'((a b c d e))
;(splitList l1 4 empty);''((a b c d) (e))
;(splitList l1 3 empty);'((a b c) (d e))
;(splitList l1 2 empty);'((a b) (c d) (e))
;(splitList l1 1 empty);'((a) (b) (c) (d) (e))(define (makeSubLists aList size result)
(cond [(= size 0) result]
[else
(makeSubLists
aList (- size 1)
(cons (splitList aList size empty) result)
)]))
(define (showMultiItemsList aList)
(display "(")
(map (lambda (item)
(display item)
(display ","))
(reverse (rest (reverse aList))))
(display (first (reverse aList)))
(display ")"));; Tests
;(showMultiItemsList '(a b c));(a,b,c)(define (showResult aList)
(map (lambda (item)
(cond [(> (length item) 1)
(showMultiItemsList item)
]
[else
(display item)
])
(display ",")
) (reverse (rest (reverse aList))))
(cond [(> (length (first (reverse aList))) 1)
(showMultiItemsList (first (reverse aList)))]
[else
(display (first (reverse aList)))]
)
(displayln "")
);; Tests
(define aList '(a b c d e f g h i))
(define result (makeSubLists aList (length aList) empty))
(define null (map showResult result))
;;result:
#|
(a),(b),(c),(d),(e),(f),(g),(h),(i)
(a,b),(c,d),(e,f),(g,h),(i)
(a,b,c),(d,e,f),(g,h,i)
(a,b,c,d),(e,f,g,h),(i)
(a,b,c,d,e),(f,g,h,i)
(a,b,c,d,e,f),(g,h,i)
(a,b,c,d,e,f,g),(h,i)
(a,b,c,d,e,f,g,h),(i)
(a,b,c,d,e,f,g,h,i)
|#
String string = "a,b,c,d,e,f,g,h,i";
int size = (string.length() - 1) / 2 + 1;
for(int i = 1; i <= 9; i++){
StringBuffer buffer = new StringBuffer(string);
int len = (size % i == 0) ? size / i : size / i + 1;
int index = 0;
for(int j = 0; j < len - 1; j++){
buffer.insert( (2 * i) * j + index++, '(');
buffer.insert((2 * i) * j + index++ + (2 * i - 1), ')');
}
buffer.insert((2 * i) * (len - 1) + index++, '(');
buffer.append(")");
System.out.println(buffer);
}
}
String string = "a,b,c,d,e,f,g,h,i";
int size = (string.length() - 1) / 2 + 1;
for(int i = 1; i <= 9; i++){
StringBuffer buffer = new StringBuffer(string);
int len = (size % i == 0) ? size / i : size / i + 1;
int index = 0;
for(int j = 0; j < len - 1; j++){
buffer.insert( (2 * i) * j + index++, '(');
buffer.insert((2 * i) * j + index++ + (2 * i - 1), ')');
}
buffer.insert((2 * i) * (len - 1) + index++, '(');
buffer.append(")");
System.out.println(buffer);
}
}