У меня возникли проблемы с обновлением error
в нижнем коде. Я включил 2 класса ниже; класс MadLib и класс MadLibRunner.Обновление значения в цикле
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
import static java.lang.System.*;
public class MadLib
{
ArrayList<String> nouns;
ArrayList<String> adjectives;
ArrayList<String> verbs;
public MadLib()
{
nouns = new ArrayList<String>();
adjectives = new ArrayList<String>();
verbs = new ArrayList<String>();
nouns.add("dog");
nouns.add("pig");
nouns.add("chicken");
nouns.add("building");
nouns.add("car");
nouns.add("person");
nouns.add("place");
nouns.add("thing");
nouns.add("truck");
nouns.add("city");
nouns.add("state");
nouns.add("school");
nouns.add("student");
nouns.add("bird");
nouns.add("turkey");
nouns.add("lion");
nouns.add("tiger");
nouns.add("alligator");
nouns.add("elephant");
adjectives.add("blue");
adjectives.add("green");
adjectives.add("orange");
adjectives.add("fat");
adjectives.add("skinny");
adjectives.add("tall");
adjectives.add("funny");
adjectives.add("mad");
adjectives.add("glad");
adjectives.add("happy");
adjectives.add("silly");
adjectives.add("purple");
adjectives.add("big");
adjectives.add("little");
adjectives.add("tiny");
adjectives.add("huge");
verbs.add("run");
verbs.add("fly");
verbs.add("skip");
verbs.add("climb");
verbs.add("clean");
verbs.add("smell");
verbs.add("eat");
verbs.add("cry");
verbs.add("smile");
verbs.add("laugh");
verbs.add("jump");
verbs.add("crank");
verbs.add("program");
}
public String sentence (String statement)
{
String output = statement;
String word = "";
Random rand = new Random();
String error = "";
for (int i = 0; i < output.length() - 1; i++)
{
if (nouns.size() > 0 && adjectives.size() > 0 && verbs.size() > 0)
{
if (output.charAt(i) == '#')
{
int random = rand.nextInt(nouns.size());
word = nouns.get(random);
nouns.remove(random);
output = output.substring(0, i) + word + (output.substring(i + 1));
}
else if (output.charAt(i) == '&')
{
int random = rand.nextInt(adjectives.size());
word = adjectives.get(random);
adjectives.remove(random);
output = output.substring(0, i) + word + (output.substring(i + 1));
}
else if (output.charAt(i) == '@')
{
int random = rand.nextInt(verbs.size());
word = verbs.get(random);
verbs.remove(random);
output = output.substring(0, i) + word + (output.substring(i + 1));
}
}
else
{
int nounCount = nouns.size() - 1;
int adjectiveCount = adjectives.size() - 1;
int verbCount = verbs.size() - 1;
if (nounCount == 0)
{
error = error + "Error: Not enough nouns.";
}
else if (adjectiveCount == 0)
{
error = error + "Error: Not enough adjectives.";
}
else if (verbCount == 0)
{
error = error + "Error: Not enough verbs.";
}
else if (nounCount == 0 && adjectiveCount == 0)
{
error = error + "Error: Not enough nouns and adjectives.";
}
else if (nounCount == 0 && verbCount == 0)
{
error = error + "Error: Not enough nouns and verbs.";
}
else if (adjectiveCount == 0 && verbCount == 0)
{
error = error + "Error: Not enough adjectives and verbs.";
}
else if (nounCount == 0 && adjectiveCount == 0 && verbCount == 0)
{
error = error + "Error: Not enough nouns, adjectives, and verbs.";
}
output = "Error: Not enough " + error;
break;
}
}
return output;
}
}
А класс бегуна ...
public class MadLibRunner
{
public static void main(String args[])
{
boolean quit=false;
MadLib prog = new MadLib();
do
{
out.println("Welcome to MadLibs!\n Please input your coded sentence, or end to exit: ");
Scanner in = new Scanner (System.in);
String statement = in.nextLine();
if(statement.equals("end"))
quit=true;
else
out.println(prog.sentence(statement));
}while(!quit);
out.println("\nThank you, goodbye.\n");
}
}
Цель else
заявления в петле, чтобы определить, какие части речи отсутствует. Проблема, которую я продолжаю получать, - error
, не будет обновляться в конце цикла for
в MadLib
. Я попытался изменить начальное значение error
, чтобы проверить выход, и он вернул тестовое значение error
. Как я могу получить error
для обновления в цикле?
Вау, я просто понял, что забыл прояснить что-то очень важное. Я должен иметь возможность вводить несколько предложений в код, и каждый раз, когда используемые существительные/прилагательные/глаголы удаляются из списка. Если в течение любой итерации недостаточно одного из этих частей речи для всего предложения, оно должно отображать сообщение об ошибке. Сообщение об ошибке - это то, что не работает.
Предлагаю вам выполнить свой код в своем отладчике, если вы хотите понять, что делает каждая строка кода. Если переменная 'error' не изменяется, то ни одно из ваших условий не является« истинным » –
, почему он должен ввести этот блок кода? В ваших контейнерах содержатся записи (существительные, глаголы и т. Д.) – Nim
Что он печатает, если вы добавляете 'System.out.println (nounCount +" "+ adjectiveCount +" "+ verbCount),' после этой строки 'int verbCount = глаголы .size() - 1; '? Я уверен, что он печатает '-1'. Таким образом, все ваши 'if-else' являются ложными, так как они никогда не равны 0. – Frakcool