该程序应该从用户获取两个char值,并且每行要显示的char值数量。然后输出用户输入的两个char值和每行各个chars之间的char值。 这是我的代码:
import java.util.Scanner;
public class DisplayCharactersInBetween {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
String ch1, ch2;
int charsPerLine;
System.out.print("Between what two characters do you wish to print: ");
ch1 = console.next();
ch2 = console.next();
System.out.print("And how many chars per line: ");
charsPerLine = console.nextInt();
printChars(ch1.charAt(0), ch2.charAt(0), charsPerLine);
console.close();
}
public static void printChars(char ch1, char ch2, int charsPerLine) {
int difference = (int)(ch2 - ch1);
for (int i = 0; i < difference; i++) {
System.out.print(++ch1 + " ");
if (ch1 == ch2)
break;
if (i % charsPerLine == 0)
System.out.print(++ch1 + "\n");
}
}
}
例如我选择a和z。我还选择4作为每行数。我首先不明白为什么第一行只有两个字母而后面几个有5个字母。
这是我的输出:
b c
d e f g h
i j k l m
n o p q r
s t u v w
x y z
答案 0 :(得分:1)
您可以尝试这些修改,也可以考虑问题的逻辑。它比你想象的容易:
<强>代码强>:
public static void printChars(char ch1, char ch2, int charsPerLine)
{
int difference = (int) (ch2 - ch1);
for (int i = 1; i < difference; i++) { // Adjust the range, start in 1 so it doesn't print another line when i == 0
System.out.print(++ch1 + " ");
if (i % charsPerLine == 0) { // Just check if (i % 4 == 0)
System.out.print("\n");
}
}
}
您无需检查是否ch1 == ch2
,因为for
语句会为您“执行”。
<强>输出:强>
b c d e
f g h i
j k l m
n o p q
r s t u
v w x y
这会打印 a
和z
之间的所有字符。
答案 1 :(得分:0)
i
应为(i + 1)
,我将if
更改为if/else
。它现在有效
public static void printChars(char ch1, char ch2, int charsPerLine) {
int difference = (int) (ch2 - ch1);
for (int i = 0; i < difference; i++) {
if (ch1 == ch2) {
break;
}
if ((i + 1) % charsPerLine == 0) {
System.out.print(ch1++ + "\n");
} else {
System.out.print(ch1++ + " ");
}
}
}
输入
a z 4
输出
a b c d
e f g h
i j k l
m n o p
q r s t
u v w x
y
答案 2 :(得分:0)
好的,我想澄清一下:你想要从每个点到点X打印指定数量的字符(x和y是字母之间的间隔?
如果是,那么算法可以是:
int printAmount = 3;
char letter1='a';
char letter3='z';
char letter2=(char) ((int)letter1+printAmount-1);
for(letter1='a';letter1<=letter3;letter1++){
System.out.print(letter1);
if(letter1==letter2){
System.out.println();
letter2+=printAmount;
}
}
这不是很优雅的方式,但它有效(如果我理解你的目的)。此外,它只是一种算法,如果你愿意,你可以根据自己的情况进行调整。
答案 3 :(得分:0)
使用char转换为int:
的事实可以简化for循环for (int c = ch1 + 1; c < ch2; c++)
System.out.print((char) c + ((c - ch1)%charsPerLine == 0 ? "\n":" "));
输出 (view full code here):
b c d e f
g h i j k
l m n o p
q r s t u
v w x y
答案 4 :(得分:0)
为什么第一行只有2个字符? - 因为在第一次迭代中i = 0且0%0 = 0,这意味着在第一次迭代中你打印b c和一个换行符。
你也在最后打印z(这是你想要的吗?)。试试这个(它不打印z,如果你需要z然后只需替换&lt; by&lt; =):
public static void printChars(char ch1, char ch2, int charsPerLine) {
int difference = (int)(ch2 - ch1);
ch1++;
for (int i = 1; i < difference; i++) {
System.out.print(ch1++ + " ");
if (i % charsPerLine == 0)
System.out.print("\n");
}
}
我建议你学习如何在java中使用调试(使用eclipse或任何其他IDE非常容易) - 很容易发现像这样的错误。