将参数传递给方法

时间:2014-10-23 03:13:22

标签: java

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个。我刚刚开始在课堂上学习课程,我不确定如果我正确地将参数传递给方法。

我的程序没有打印任何内容,任何想法可能出错?

4 个答案:

答案 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