2017-02-05 17 views
-3

У меня проблемы с отображением моего вывода в одно диалоговое окно сообщения, которое находится внутри цикла for. В настоящее время он отображает каждый вывод в отдельных блоках. Цель состоит в следующем: после того, как пользователь запросит два целых числа, он должен отображать ОДИН блок сообщений простых чисел и палиндромов между этими числами. Такие, как:JAVA: для циклов и JOptionPane

«Между числа х и у: (простые числа здесь)

палиндромов: (палиндромический прайм здесь)»

Я попытался StringBuilder, но я не был действительно успешным. Любые идеи и советы помогут. Вот надрез

for (int i = x; i <= y; i++) { 
     int k; 
     for (k = 2; k < i; k++) { 
      int n = i % k; 
      if (n == 0) 
       break; 
     } 
if (i == k) { 
     JOptionPane.showMessageDialog(null, "Between the numbers " + x + " and " + y + ": "); 
     String output = i + ""; 
     //this is where my issues start 
     //JOptionPane.showMessageDialog(null, output, "Prime Numbers and Palindromes", JOptionPane.INFORMATION_MESSAGE); 
} 
} 
+1

Это ожидаемый выход. Поскольку вы пытаетесь отобразить окно сообщения внутри цикла for, когда 'if (i == k)' становится истинным, он начинает отображать окно сообщения, пока for-loop или условие не станет ложным. – Shashanth

ответ

1

Ваш if(i == k) отображает окно сообщения каждый раз, когда он находит простое и отображает его. То, что вы хотите сделать, это все эти простые числа, а затем показывать их в окне сообщения. Один из способов сделать это - использовать StringBuilder внутри цикла for и добавить к нему значения, необходимые изнутри if(i == k), а затем, когда ваш цикл for завершает показ этого результата в окне сообщения с toString(). Вот как я это сделал, сделав вывод простых чисел функцией и вместо отображения окна сообщения каждый раз в if(i == k) с использованием StringBuilder и возвращая его как строку. Конечный результат - это то, что вы показываете.

public static String getPalindromicPrimes(int x, int y) { 

    StringBuilder sb = new StringBuilder(); 
    JOptionPane.showMessageDialog(null, "Between the numbers " + x + " and " + y + ": "); 

    for (int i = x; i <= y; i++) { 
     int k; 
     for (k = 2; k < i; k++) { 
      int n = i % k; 
      if (n == 0) 
       break; 
     } 
     if (i == k) { 
      sb.append(" " + i + " "); 
     } 

    } 
    return sb.toString(); 

} 

public static void main(String[] args) { 

    String output = getPalindromicPrimes(4, 7); 

    JOptionPane.showMessageDialog(null, "Palindromes: " + output, "Prime Numbers and Palindromes", JOptionPane.INFORMATION_MESSAGE); 

}