[英]Multiple for loop in java with conditions
我知道這是一個非常簡單的問題,但是我剛剛開始學習一種新語言。 因此需要一些輸入。
問題:我有三個長度不同的琴弦。 我需要調用該方法以每次顯示每個字符串的一個字符。 如果沒有相應的字符,那么我需要傳遞一個空字符(默認值)
public class test {
public static void main(String[] args) {
String a = "hi";
String b = "hey";
String c = "hello";
int len1 = a.length();
int len2 = b.length();
int len3 = c.length();
int max = 0;
if ( len1 > len2 && len1 > len3 )
max = len1;
else if ( len2 > len1 && len2 > len3 )
max = len2;
else if ( len3 > len1 && len3 > len2 )
max = len3;
for(int i=0; i<= max; i++) {
char c1 = 0; char c2 = 0; char c3 = 0;
//h,h,h
//i,e,e
//'',y,l
//'','',l
//'','',o
printCharMerge(c1, c2, c3);
}
}
public static void printCharMerge(char a, char b, char c) {
System.out.println("A char val :"+ a + "B char val :"+ b + "C char val :"+ c);
}
}
任何幫助和代碼改進將不勝感激。
也許這會有所幫助。
public class R
{
public static void main(String[] args) {
String a = "hi";
String b = "hey";
String c = "hello";
int len1 = a.length();
int len2 = b.length();
int len3 = c.length();
int max = 0;
if ( len1 > len2 && len1 > len3 )
max = len1;
else if ( len2 > len1 && len2 > len3 )
max = len2;
else if ( len3 > len1 && len3 > len2 )
max = len3;
for(int i=0; i<= max; i++) {
char c1 = 0; char c2 = 0; char c3 = 0;
if(i >= a.length()) c1 = '\u0000';
else c1 = a.charAt(i);
if(i >= b.length()) c2 = '\u0000';
else c2 = b.charAt(i);
if(i >= c.length()) c3 = '\u0000';
else c3 = c.charAt(i);
printCharMerge(c1, c2, c3);
}
}
public static void printCharMerge(char a, char b, char c) {
System.out.println("A char val : '"+ a + "', B char val :'"+ b + "', C char val ':"+ c + "'");
}
}
我已經自由地修改了printCharMerge的輸出,以便可以清楚地理解所打印的值是一個空字符。
另外,請記住, char
的默認值為'\ '
如果為字符串(a,b或c)調用charAt(i)
,並且i
等於或大於該字符串的長度,則將引發StringIndexOutOfBoundsException
。
因此,如果i
等於或大於該字符串的長度,則字符變為'\ '
但是:即使這樣也會打印一個空格,因為空char
被打印為' '
。 因此,應該在各處使用字符串,如下所示:
public class R
{
public static void main(String[] args) {
String a = "hi";
String b = "hey";
String c = "hello";
int len1 = a.length();
int len2 = b.length();
int len3 = c.length();
int max = 0;
if ( len1 > len2 && len1 > len3 )
max = len1;
else if ( len2 > len1 && len2 > len3 )
max = len2;
else if ( len3 > len1 && len3 > len2 )
max = len3;
for(int i=0; i<= max; i++) {
String c1 = ""; String c2 = ""; String c3 = "";
if(i >= a.length()) c1 = "";
else c1 = ""+a.charAt(i);
if(i >= b.length()) c2 = "";
else c2 = ""+b.charAt(i);
if(i >= c.length()) c3 = "";
else c3 = ""+c.charAt(i);
printCharMerge(c1, c2, c3);
}
}
public static void printCharMerge(String a, String b, String c) {
System.out.println("A char val : '"+ a + "',\tB char val : '"+ b + "',\tC char val : '"+ c + "'");
}
}
並請注意,字符串中的\\t
代表水平制表符:)
您快到了,替換for循環:
for(int i=0; i< max; i++) {
String c1 = (a.length() <= i ? "" : a.substring(i, i + 1));
String c2 = (b.length() <= i ? "" : b.substring(i, i + 1));
String c3 = (c.length() <= i ? "" : c.substring(i, i + 1));
System.out.println("A char val: "+ c1 + " B char val: "+ c2 + " C char val: "+ c3);
}
您也可以縮短對最大值的搜索:
int max = Math.max(a.length(), Math.max(b.length(), c.length()));
首先,您可以通過用逗號分隔在一行上聲明多個相同類型的變量。 其次,可以通過使用對Math.max(int, int)
嵌套調用來確定三個值中的最大值。 第三,您可以使用Character
包裝器存儲null
(沒有“空字符”)。 最后,您可以在打印例程中使用具有null
保護的三元組。 喜歡,
public static void main(String[] args) {
String a = "hi", b = "hey", c = "hello";
int max = Math.max(a.length(), Math.max(b.length(), c.length()));
for (int i = 0; i < max; i++) {
Character x = i >= a.length() ? null : a.charAt(i),
y = i >= b.length() ? null : b.charAt(i),
z = i >= c.length() ? null : c.charAt(i);
printChar(x, y, z);
}
}
public static void printChar(Character a, Character b, Character c) {
if (a != null) {
System.out.printf("A char val : %c ", a);
}
if (b != null) {
System.out.printf("B char val : %c ", b);
}
if (c != null) {
System.out.printf("C char val : %c", c);
}
System.out.println();
}
輸出
A char val : h B char val : h C char val : h
A char val : i B char val : e C char val : e
B char val : y C char val : l
C char val : l
C char val : o
采用 。 charAt
,例如:
public class test {
public static void main(String[] args) {
String a = "hi";
String b = "hey";
String c = "hello";
int len1 = a.length();
int len2 = b.length();
int len3 = c.length();
int max = 0;
if ( len1 > len2 && len1 > len3 )
max = len1;
else if ( len2 > len1 && len2 > len3 )
max = len2;
else if ( len3 > len1 && len3 > len2 )
max = len3;
for(int i=0; i<= max; i++) {
char c1 = getChar(a, i); char c2 = getChar(b, i); char c3 = getChar(c, i);
//h,h,h
//i,e,e
//'',y,l
//'','',l
//'','',o
printCharMerge(c1, c2, c3);
}
}
public static void printCharMerge(char a, char b, char c) {
System.out.println("A char val :"+ a + "B char val :"+ b + "C char val :"+ c);
}
public static char getChar(String text, int index) {
return (text.length() > index) ? text.charAt(index) : '\u0000';
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.