#java #arrays #loops
#java #массивы #циклы
Вопрос:
Я пытаюсь многократно запускать свой код, пока пользователь не введет none. И когда я ввожу имя состояния, мне нужно, чтобы оно один раз отображало состояние flower и состояние bird без какого-либо сообщения об ошибке (попробуйте еще раз). Но поскольку я написал строку for(int i=0; i<stateInfo.length; i )
, она повторяет «попробуйте еще раз» 49 раз и дает мне ответ в n-й строке, где состояние находится в массивах. Мне нужно заставить его работать, печатая только состояние flower и state bird.
//import Scanner, time.Duration, time.Instant
import java.util.Scanner;
import java.time.Duration;
import java.time.Instant;
public class StateFlowerBird {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//Time counts starts
Instant start = Instant.now();
//greeting user
greetings();
//construct Scanner
Scanner scannerIn = new Scanner(System.in);
String state = "";
do {
//2D Arrays with State, state flower, and state bird
String[][] stateInfo = new String[][]{
{"Alabama", "Camellia", "Yellowhammer"},
{"Alaska", "Forget-me-not", "Willow Ptarmigan"},
{"Arizona", "Saguaro cactus", "Cactus Wren"},
{"Arkansas", "Apple blossom", "Mockingbird"},
{"California", "Golden poppy", "California Valley Quail"},
{"Colorado", "Rocky Mountain Columbine", "Lark Bunting"},
{"Connecticut", "Mountain laurel", "Robin"},
{"Delaware", "Peach blossom", "Blue Hen Chicken"},
{"Florida", "Orange blossom", "Mockingbird"},
{"Georgia", "Cherokee rose", "Brown Thrasher"},
{"Hawaii", "Hibiscus", "Nene"},
{"Idaho", "Syringa", "Mountain Bluebird"},
{"Illinois", "Native violet", "Cardinal"},
{"Indiana", "Peony", "Cardinal"},
{"Iowa", "Wild rose", "Eastern Goldfinch"},
{"Kansas", "Native sunflower", "Western Meadowlark"},
{"Kentucky", "Goldenrod", "Cardinal"},
{"Louisiana", "Magnolia", "Eastern Brown"},
{"Maine", "Pine cone amp; tassle", "Chickadee"},
{"Maryland", "Black Eyed Susan", "Baltimore Oriole"},
{"Massachusettes", "Mayflower", "Chickadee"},
{"Michigan", "Apple blossom", "Robin"},
{"Minnesota", "Lady slipper", "Common Loon"},
{"Mississippi", "Magnolia", "Mockingbird"},
{"Missouri", "Hawthorn", "Bluebird"},
{"Montana", "Bitterroot", "Western Meadowlark"},
{"Nebraska", "Goldenrod", "Western Meadowlark"},
{"Nevada", "Sagebrush", "Mountain Bluebird"},
{"New Hampshire", "Purple lilac", "Purple Finch"},
{"New Jersey", "Purple violet", "Eastern Goldfinch"},
{"New Mexico", "yucca", "Roadrunner"},
{"New York", "Rose", "Bluebird"},
{"North Carolina", "Dogwood", "Cardinal"},
{"North Dakota", "Wild prairie rose", "Western Meadowlark"},
{"Ohio", "Scarlet carnation", "Cardinal"},
{"Oklahoma", "Mistletoe", "Scissor-tailed"},
{"Oregon", "Oregon Grape", "Western Meadowlark"},
{"Pennsylvania", "Mountain laurel", "Ruffed Grouse"},
{"Rhode Island", "Violet", "Rhode Island Red"},
{"South Carolina", "Yellow jessamine", "Great Carolina Wren"},
{"South Dakota", "Pasque flower", "Ring-necked Pheasant"},
{"Tennesssee", "Purple iris", "Mockingbird"},
{"Texas", "Texas Blue Bonnet", "Mockingbird"},
{"Utah", "Sego lily", "American Seagull"},
{"Vermont", "Red clover", "Hermit Thrush"},
{"Virginia", "Dogwood", "Cardinal"},
{"Washington", "Western rhododendron", "Willow Goldfinch"},
{"West Virginia", "Rhododendron", "Cardinal"},
{"Wisconsin", "Wood violet", "Robin"},
{"Wyoming", "Indian paint brush", "Western Meadowlark"}};
state = "";
//Ask user to type the name of state or none
System.out.println("nEnter a State or None to exit: " state);
state = scannerIn.nextLine();
for(int stateNum = 0;stateNum<stateInfo.length;stateNum ){
if(stateInfo[stateNum][0].equalsIgnoreCase(state)){
System.out.println("Flower: " stateInfo[stateNum][1]
"nBird: " stateInfo[stateNum][2]);
}
else if(!stateInfo[stateNum][0].equalsIgnoreCase(state)){
errorMessage();
}
}
} while(!state.equalsIgnoreCase("None"));
if (state.equalsIgnoreCase("None")){
endStatement();
}
Instant end = Instant.now();
System.out.println("Elapsed time in seconds was: "
Duration.between(start, end).toNanos()/1_000_000_000.0
" seconds.");
System.out.println("**********************************");
System.exit(0);
}
private static void greetings() {
System.out.println("*****************************************************");
System.out.println("***** Let's find out the state flower and bird! *****");
}
private static void endStatement() {
System.out.println("n***** Thank you for playing! *****");
}
private static void errorMessage() {
System.out.println("Invalid State. Try it again.");
}
}
Ответ №1:
Используйте ‘break’ в условии if . Как только будет найдено совпадение, цикл прервется.
Ответ №2:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
//import Scanner, time.Duration, time.Instant
import java.util.Scanner;
import java.time.Duration;
import java.time.Instant;
public class StateFlowerBird {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
//Time counts starts
Instant start = Instant.now();
//greeting user
greetings();
//construct Scanner
Scanner scannerIn = new Scanner(System.in);
String state = "";
do {
//2D Arrays with State, state flower, and state bird
String[][] stateInfo = new String[][]{
{"Alabama", "Camellia", "Yellowhammer"},
{"Alaska", "Forget-me-not", "Willow Ptarmigan"},
{"Arizona", "Saguaro cactus", "Cactus Wren"},
{"Arkansas", "Apple blossom", "Mockingbird"},
{"California", "Golden poppy", "California Valley Quail"},
{"Colorado", "Rocky Mountain Columbine", "Lark Bunting"},
{"Connecticut", "Mountain laurel", "Robin"},
{"Delaware", "Peach blossom", "Blue Hen Chicken"},
{"Florida", "Orange blossom", "Mockingbird"},
{"Georgia", "Cherokee rose", "Brown Thrasher"},
{"Hawaii", "Hibiscus", "Nene"},
{"Idaho", "Syringa", "Mountain Bluebird"},
{"Illinois", "Native violet", "Cardinal"},
{"Indiana", "Peony", "Cardinal"},
{"Iowa", "Wild rose", "Eastern Goldfinch"},
{"Kansas", "Native sunflower", "Western Meadowlark"},
{"Kentucky", "Goldenrod", "Cardinal"},
{"Louisiana", "Magnolia", "Eastern Brown"},
{"Maine", "Pine cone amp; tassle", "Chickadee"},
{"Maryland", "Black Eyed Susan", "Baltimore Oriole"},
{"Massachusettes", "Mayflower", "Chickadee"},
{"Michigan", "Apple blossom", "Robin"},
{"Minnesota", "Lady slipper", "Common Loon"},
{"Mississippi", "Magnolia", "Mockingbird"},
{"Missouri", "Hawthorn", "Bluebird"},
{"Montana", "Bitterroot", "Western Meadowlark"},
{"Nebraska", "Goldenrod", "Western Meadowlark"},
{"Nevada", "Sagebrush", "Mountain Bluebird"},
{"New Hampshire", "Purple lilac", "Purple Finch"},
{"New Jersey", "Purple violet", "Eastern Goldfinch"},
{"New Mexico", "yucca", "Roadrunner"},
{"New York", "Rose", "Bluebird"},
{"North Carolina", "Dogwood", "Cardinal"},
{"North Dakota", "Wild prairie rose", "Western Meadowlark"},
{"Ohio", "Scarlet carnation", "Cardinal"},
{"Oklahoma", "Mistletoe", "Scissor-tailed"},
{"Oregon", "Oregon Grape", "Western Meadowlark"},
{"Pennsylvania", "Mountain laurel", "Ruffed Grouse"},
{"Rhode Island", "Violet", "Rhode Island Red"},
{"South Carolina", "Yellow jessamine", "Great Carolina Wren"},
{"South Dakota", "Pasque flower", "Ring-necked Pheasant"},
{"Tennesssee", "Purple iris", "Mockingbird"},
{"Texas", "Texas Blue Bonnet", "Mockingbird"},
{"Utah", "Sego lily", "American Seagull"},
{"Vermont", "Red clover", "Hermit Thrush"},
{"Virginia", "Dogwood", "Cardinal"},
{"Washington", "Western rhododendron", "Willow Goldfinch"},
{"West Virginia", "Rhododendron", "Cardinal"},
{"Wisconsin", "Wood violet", "Robin"},
{"Wyoming", "Indian paint brush", "Western Meadowlark"}};
state = "";
//Ask user to type the name of state or none
System.out.println("nEnter a State or None to exit: " state);
state = scannerIn.nextLine();
boolean flag = false;
int index=0;
for (int stateNum = 0; stateNum < stateInfo.length; stateNum ) {
if (stateInfo[stateNum][0].equalsIgnoreCase(state)) {
index=stateNum;
flag=true;
} else if (!stateInfo[stateNum][0].equalsIgnoreCase(state)) {
}
}
if (flag) {
System.out.println("Flower: " stateInfo[index][1]
"nBird: " stateInfo[index][2]);
} else{
errorMessage();
}
} while (!state.equalsIgnoreCase("None"));
if (state.equalsIgnoreCase("None")) {
endStatement();
}
Instant end = Instant.now();
System.out.println("**********************************");
System.exit(0);
}
private static void greetings() {
System.out.println("*****************************************************");
System.out.println("***** Let's find out the state flower and bird! *****");
}
private static void endStatement() {
System.out.println("n***** Thank you for playing! *****");
}
private static void errorMessage() {
System.out.println("Invalid State. Try it again.");
}
}
Я только что изменил ваш цикл, пожалуйста, посмотрите на эти изменения:
boolean flag = false;
int index=0;
for (int stateNum = 0; stateNum < stateInfo.length; stateNum ) {
if (stateInfo[stateNum][0].equalsIgnoreCase(state)) {
index=stateNum;
flag=true;
} else if (!stateInfo[stateNum][0].equalsIgnoreCase(state)) {
}
}
if (flag) {
System.out.println("Flower: " stateInfo[index][1]
"nBird: " stateInfo[index][2]);
} else{
errorMessage();
}
Ответ №3:
Просто объявите логическое значение boolean stateFound=false;
, прежде чем вводить цикл for для проверки состояний. Установите это значение true
, когда условие в вашем цикле for имеет значение true (= состояние найдено). Удалите else
часть (с сообщением об ошибке) и поместите if(!stateFound) {errorMessage();}
после вашего цикла.
Кстати: почему вы объявляете свой массив в каждом цикле do while
цикла?
Ответ №4:
for(int stateNum = 0;stateNum<stateInfo.length;stateNum ){
if(stateInfo[stateNum][0].equalsIgnoreCase(state)){
System.out.println("Flower: " stateInfo[stateNum][1]
"nBird: " stateInfo[stateNum][2]);
}
else if(!stateInfo[stateNum][0].equalsIgnoreCase(state)){
errorMessage();//It Will execute for every non -matching items
}
}
используйте
break
инструкции next to conditionsСсылка на документацию: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html
if(stateInfo[stateNum][0].equalsIgnoreCase(state)){
System.out.println("Flower: " stateInfo[stateNum][1]
"nBird: " stateInfo[stateNum][2]);
break;
}
else if(!stateInfo[stateNum][0].equalsIgnoreCase(state)){
errorMessage();
break;
}
Во-вторых, вы можете использовать boolean для проверки результата
отображения сообщения на основе флага.