#java #loops
Вопрос:
«Введите слово или нажмите» Q», чтобы выйти», но я не знаю, как это сделать. Это кажется мне немного запутанным.
Это мой первый раз, когда я пишу на Java, и я все еще учусь.
public class RemSpecialChar {
public static void main(String[] args) {
try (Scanner scan = new Scanner(System.in)) {
String stringArray = "";
do {
System.out.print("Enter a word or 'Q' to quit: ");
String str = scan.nextLine();
for (int i = 0; i < str.length(); i ) {
if (str.charAt(i) > 64 amp;amp; str.charAt(i) <= 122) { //returns true if both conditions returns true
//adding characters into empty string
stringArray = stringArray str.charAt(i);
}
System.out.print("Input string without special characters: " stringArray); //string results
}
}
while (stringArray != "q" || stringArray != "Q");
}
}
}
THIS IS THE SAMPLE OUTPUT:
Enter a word or 'Q' to quit: Black?204123,.Scoop (input)
Input string without special characters: BlackScoop (output)
Enter a word or 'Q' to quit: q (input)
(end program)
terminal output:
Enter a word or 'Q' to quit: q
Enter a word or 'Q' to quit: q
Enter a word or 'Q' to quit: q
Enter a word or 'Q' to quit: q
Enter a word or 'Q' to quit: q
Enter a word or 'Q' to quit: q
Enter a word or 'Q' to quit: q
Enter a word or 'Q' to quit:
Комментарии:
1. если («Q».равно(str)) { перерыв; } поместите это в начало вашего цикла. он должен вырваться из цикла for, если вы введете Q
Ответ №1:
Используйте цикл while для считывания входных данных и прерывания цикла, если вход «Q».
public static void main(String[] args)
{
try(Scanner sc = new Scanner(System.in))
{
while(true)
{
System.out.print("Enter a word or press 'Q' to quit: ");
String word = sc.nextLine();
if ("q".equalsIgnoreCase(word))
break;
System.out.println(word);
}
}
catch (Exception e)
{
e.printStackTrace();
}
System.out.println("Exiting... ");
}
Комментарии:
1. лучше рекомендовать !»q».equalsIgnoreCase(слово). В этом случае это не будет иметь большого значения, но если вы привыкли использовать строковый литерал в качестве параметра, рано или поздно это приведет к NPE
2. Я согласен, это обоснованное утверждение
Ответ №2:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try (Scanner scan = new Scanner(System.in)) {
while (true) {
String inputdata = scan.nextLine();
if (inputdata.length() == 1 amp;amp; (inputdata.charAt(0) == 'Q' || inputdata.charAt(0) == 'q')) {
break;
}
String stringArray = "";
for (int i = 0; i < inputdata.length(); i ) {
if (inputdata.charAt(i) > 64 amp;amp; inputdata.charAt(i) <= 122) { // returns true if both conditions
// returns true
// adding characters into empty string
stringArray = stringArray inputdata.charAt(i);
}
}
System.out.print("Input string without special characters: " stringArray);
}
}
}
}
Комментарии:
1. Спасибо за комментарий. Это работает сейчас, и я официально узнал об этом. Благодаря тебе. Покой вон!
Ответ №3:
Взгляните на эту строку:
while (stringArray != "q" || stringArray != "Q")
Это повторяется, пока stringArray
нет "q"
или нет "Q"
. Другими словами, это должно быть и "q"
то и другое и "Q"
в то же время, чтобы он вышел, что невозможно.
То, что вы на самом деле хотели, — это использовать amp;amp;
:
while (stringArray != "q" amp;amp; stringArray != "Q")
Повторяйте, пока нет, "q"
и также нет "Q"
.
Хотя в этом корень вашей проблемы, я все равно посоветую вам использовать ответ, который вы уже приняли.
Изменить: Как уже отмечалось, вы также не должны сравнивать строки с ==
или !=
.
while (!"q".equals(stringArray) amp;amp; !"Q".equals(stringArray))
И тогда вы могли бы использовать equalsIgnoreCase
то же самое, что и в другом ответе. Я просто хотел указать на главный недостаток в логике использования ||
вместо amp;amp;
здесь.
Комментарии:
1. нет, он не хочет этого делать. Вы никогда не должны сравнивать значения объектов с == или !=. То, что вы делаете, является ссылочным сравнением, а не сравнением, основанным на ценности.
2. Спасибо за полезные комментарии, но он все еще не работает, но код в порядке
3. @Stultuske Добавил правку, касающуюся
==
строк и!=
для строк. Хотя, это был не тот момент, который я имел в виду в этом ответе.