class method {
public static void printChars(char ch1, char ch2, int numberPerLine) {
for (int i = ch1; i <= (int) ch2 - (int) ch1; i++) { //starting at ch1, loops until ch2
if (i % numberPerLine == 0) { //max 10 characters per line
System.out.println((char) i);
}
else {
System.out.print((char) i + " ");
}
}
}
}
public class q2 {
public static void main(String[] args) {
method.printChars((char) 49, (char) 90, 10); //passes the ASCII values of 1 and Z onto the method
}
}
我正在尝试编写一个带3个输入的程序 - (开头字符,结束字符和每行字符数),然后将其打印出来。例如 - (49,90,10)将打印出从1到Z的所有ASCII字符,每行10个。我刚刚开始在课堂上学习课程,我不确定如果我正确地将参数传递给方法。
我的程序没有打印任何内容,任何想法可能出错?
答案 0 :(得分:1)
for (int i = ch1; i <= (int) ch2; i++)
90-49=41
这显然是<i(49)
所以它不会打印任何内容 if (i % numberPerLine == 0) {
不正确,因为我从49
开始,但无效。您需要使用count
个字符的其他计数器,然后选中if(counter==numberLine){
来更改行。例如
public static void printChars(char ch1, char ch2, int numberPerLine) {
int count=1;
for (int i = ch1; i <= ch2; i++) {
if (count == numberPerLine) {
System.out.println((char) i);count=0;//reset counter
}
else {
System.out.print((char) i + " ");count++;//increment counter
}
}
}
答案 1 :(得分:1)
你的错误在于for循环线。将其更改为:
for (int i = ch1; i <= (int) ch2; i++) { //starting at ch1, loops until ch2
之前你所拥有的只是在错误的时间内运行。
在使用足够大的数字调用时确实有输出,但在这种情况下它不是您想要的输出(尝试在旧版本上运行method.printChars((char) 49, (char) 128, 10)
)。
另一方面,你不需要在循环中进行疯狂的int转换;在char上执行++
是完全合法的。因此,您可以将整个printChars
函数简化为:
public static void printChars(char ch1, char ch2, int numberPerLine) {
for (char i = ch1; i <= ch2/* - (int) ch1*/; i++) { //starting at ch1, loops until ch2
if (i % numberPerLine == 0) { //max 10 characters per line
System.out.println(i);
}
else {
System.out.print(i + " ");
}
}
}
答案 2 :(得分:1)
你可以使用printf()
之类的东西,比如
public static void printChars(char ch1, char ch2, int numberPerLine) {
for (char i = ch1; i <= ch2; i++) {
System.out.printf("%c ", i);
if ((1 + i - ch1) % numberPerLine == 0) {
System.out.println();
}
}
}
public static void main(String[] args) {
printChars('1', 'Z', 10);
}
输出
1 2 3 4 5 6 7 8 9 :
; < = > ? @ 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 Z
答案 3 :(得分:1)
首先,您可以使用char
来调用该方法 - 您不需要&#34;翻译&#34;它要注意:
method.printChars('1', 'z', 10);
其次,正如其他答案所建议的那样,循环中的停止条件是错误的,你不应该停止:i <= (int) ch2 - (int) ch1
但是i <= (int) ch2
最后,除非您更改if
条件,否则它会在您达到10个字符之前中断第一行:
if (i % numberPerLine == 0)
为:
if ((i - ch1 + 1) % numberPerLine == 0)
代码:
public static void printChars(char ch1, char ch2, int numberPerLine) {
for (int i = ch1; i <= (int) ch2; i++) { //starting at ch1, loops until ch2
if ((i - ch1 + 1) % numberPerLine == 0) { //max 10 characters per line
System.out.println((char) i);
}
else {
System.out.print((char) i + " ");
}
}
}
正如我之前提到的,您可以使用以下方法调用此方法:
method.printChars('1', 'z', 10);
输出将是:
1 2 3 4 5 6 7 8 9 :
; < = > ? @ 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 Z [ \ ] ^ _ ` 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 z