2014-10-23 3 views
-1
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) распечатывают все символы ASCII от 1 до Z, 10 за строку. Я только начал изучать классы в классе, я не уверен, если я правильно передаю аргументы методу.Передача аргументов методу

Моя программа ничего не печатает, любая идея, что может быть неправильным?

+0

ммммм, нет, голец является единственным характер, я не верю, что вы можете сделать это таким образом, не могли бы вы объяснить свой вопрос еще? – DreadHeadedDeveloper

+0

Я пытаюсь написать программу, которая принимает 3 ввода - (начальный символ, конечный символ и количество символов в строке), а затем распечатывает его. например (49, 90, 10) будет распечатывать все символы ASCII от 1 до Z, 10 за строку – Jack

ответ

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

Большое спасибо! :) Это сработало – Jack

1

Ваша ошибка была в для линии контура. Измените его следующим образом:

for (int i = ch1; i <= (int) ch2; i++) { //starting at ch1, loops until ch2 

Что ты, прежде чем просто работает за неправильное количество времени, как это происходит между ними.

У него был выход при вызове с достаточно большим номером, но в этом случае он не был результатом, который вы хотели получить (попробуйте запустить method.printChars((char) 49, (char) 128, 10) на старой версии).

На боковой ноте вам не нужно делать безумное заброс в цикле; совершенно законно делать ++ на колесе.Таким образом, можно упростить весь 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 + " "); 
     } 
    } 
} 
+0

Спасибо за ваш ответ, я не знал, что вы можете увеличивать символы. – Jack

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 
+0

Спасибо за ваш ответ, я не понимал, что вы можете передавать персонажи. Я только знал, как передать значения ASCII. – Jack

1

Во-первых, вы можете вызвать метод с char s - вам не нужно «переводить» его на ints:

method.printChars('1', 'z', 10); 

Во-вторых, как это было предложено другие ответы, условие остановки в цикле не так, вы не должны останавливаться на: i <= (int) ch2 - (int) ch1 но i <= (int) ch2

И наконец, он сломается первую строку перед вами достигать 10 символов, если вы не измените if состояние от:

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 
+0

Большое спасибо :) – Jack

Смежные вопросы