Мой код принимает строку, введенную пользователем, и возвращает количество слов, а также первое слово. Когда пользователь вводит пустую строку, я не хочу, чтобы отображалось «В вашей строке x слов» или «Первое слово - x», поэтому я создал boolean, но boolean не устанавливается в методе, который я пытался установить. это в true. Любая помощь, которую я могу получить о том, почему и как это исправить, была бы замечательной. Спасибо!
public static void main(String[] args){
boolean empty = false;
Scanner in = new Scanner(System.in);
System.out.print("Enter a string: ");
String str = in.nextLine();
if (empty == false) {
System.out.println("Your string has " + getWordCount(str)+" words in it.");
System.out.println("The first word is: " + firstWord(str));
}
}
public static String firstWord(String input) {
for(int i = 0; i < input.length(); i++)
{
if (input.charAt(i) == ' ')
{
return input.substring(0, i);
}
}
return input;
}
public static int getWordCount(String str){
int count = 0;
if (str != null && str.length() == 0){
System.out.println("ERROR - string must not be empty.");
empty = true;
}
else if (!(" ".equals(str.substring(0, 1))) || !(" ".equals(str.substring(str.length() - 1)))){
for (int i = 0; i < str.length(); i++){
if (str.charAt(i) == ' '){
count++;
}
}
count = count + 1;
}
return count;
}
}
Вы забываете повторно установить пустое значение на str.length () == 0
это другая проблема. объем логических разный? !!
1) Это не будет компилироваться. empty не входит в ваш метод. 2) Java передается по значению, что означает, что даже если вы передаете empty методу, вы просто передаете ценитьempty, а не фактическую переменную.
И здесь нужно немного переосмыслить свою логику. Вы проверяете, является ли empty истинным до, вы вызываете getWordCount(), который установит для empty значение true




Здесь вам нужно переосмыслить свою логику (см. Фрагмент ниже):
emptygetWordCount и сохранив результат в переменной (wordCount?). Затем вы можете проверить, есть ли хотя бы одно слово, выполнив wordCount > 0.Фрагмент:
public static void main(String[] args){
// boolean empty = false; // --> not needed
Scanner in = new Scanner(System.in);
System.out.print("Enter a string: ");
String str = in.nextLine();
final int wordCount = getWordCount(str);
if (wordCount > 0) { // show message only if there is at least one word
System.out.println("Your string has " + wordCount +" words in it.");
System.out.println("The first word is: " + firstWord(str));
}
}
public static String firstWord(String input) {
// .. code omitted for brevity
}
public static int getWordCount(String str){
int count = 0;
if (str != null && str.length() == 0){
System.out.println("ERROR - string must not be empty.");
// empty = true; --> not needed
}
// ... code omitted for brevity
return count;
}
вам просто нужно поменять место, если ради видимости переменной.
public static void main(String[] args) {
boolean empty = false;
Scanner in = new Scanner(System.in);
System.out.print("Enter a string: ");
String str = in.nextLine();
if (str != null && str.length() == 0) {
System.out.println("ERROR - string must not be empty.");
empty = true;
}
if (empty == false) {
System.out.println("Your string has " + getWordCount(str) + " words in it.");
System.out.println("The first word is: " + firstWord(str));
}
}
public static String firstWord(String input) {
for (int i = 0; i < input.length(); i++) {
if (input.charAt(i) == ' ') {
return input.substring(0, i);
}
}
return input;
}
public static int getWordCount(String str) {
int count = 0;
if (!(" ".equals(str.substring(0, 1))) || !(" ".equals(str.substring(str.length() - 1)))) {
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == ' ') {
count++;
}
}
count = count + 1;
}
return count;
}
Если вы действительно хотите использовать логическое значение, попробуйте создать логический метод с использованием строкового параметра, который возвращает истину, только если строка не пуста, а затем присвойте логический тип возврата логической переменной empty.
что означает "пустой" в ... пустая логическая переменная?
Вы создали логическую переменную с именем empty. Это то, что я имею в виду
Возможный дубликат Является ли Java «передачей по ссылке» или «передачей по значению»?