Я создал небольшой фрагмент кода, который просто шифрует строку, используя генератор случайных чисел. Все работает нормально, когда я запускаю программу, используя netbeans. Однако, если я пытаюсь запустить файл .jar из командной строки, вывод искажается. Кажется, он не искажен случайно, последние несколько букв всегда появляются первыми. В других случаях он просто пропускает часть строки.
Когда я пытался использовать строковые литералы вместо ввода из командной строки, все работало нормально. Поэтому я предполагаю, что существует проблема со входной частью программы.
Этот фрагмент кода находится в основном методе
while(true){
System.out.print("$");
Scanner s = new Scanner(System.in);
s.useDelimiter("\n");
String in = s.next();
String out = "";
if (in.startsWith("ks")) {
out = ScrambleString.keepSpaces(in.substring(3));
} else if (in.startsWith("fr")) {
out = ScrambleString.fullRandom(in.substring(3));
} else if (in.startsWith("kw")) {
out = ScrambleString.randomByWords(in.substring(3));
} else if (in.equals("exit")) {
break;
} else {
System.out.println(" Syntax: [fr:ks:kw] sentence\n fr full random \n ks keep spaces \n kw keep words");
}
System.out.println(">>" + out);
}
Это статические функции, вызываемые сверху
/**
* only ignore spaces while randomizing
*
* @param a
* @return
*/
public static String keepSpaces(String a) {
a = a.toLowerCase();
char[] s = a.toCharArray();
Random r = new Random();
for (int i = 0; i < s.length; i++) {
char t = s[i];
int num = r.nextInt(s.length);
if (s[i] != ' ' && s[num] != ' ') {
s[i] = s[num];
s[num] = t;
}
}
return String.valueOf(s);
}
/**
* randomize every char regardless of word or space
*
* @param a
* @return
*/
public static String fullRandom(String a) {
a = a.toLowerCase();
char[] s = a.toCharArray();
Random r = new Random();
for (int i = 0; i < s.length; i++) {
char t = s[i];
int num = r.nextInt(s.length);
s[i] = s[num];
s[num] = t;
}
return String.valueOf(s);
}
/**
* change the order of the characters per word. words are separated by spaces
*
* @param a
* @return
*/
public static String randomByWords(String a) {
String[] words = a.split(" ");
String out = "";
for (int i = 0; i < words.length; i++) {
out += fullRandom(words[i]) + " ";
}
return out;
}
Вот тестовый прогон в cmd:
А вот тестовый прогон с использованием netbeans: