Сделать меню для готовой программы
Лабораторная работа: Нужно взять код из предыдущей лабораторной, но переобразовать его таким образом, чтобы выбор действия производился из консоли:
1. Ввод данных
2. Вывод данных
3. Провести расчет
4. Вывод результата
5. Завершить программу
Сама программа берет текст, и удаляет слово по заданной длинне.
// initialize scanner for read data from console
Scanner scanner = new Scanner(System.in);
// getting entered text
String text = scanner.nextLine();
// getting word length
int wlength = scanner.nextInt();
// splitting text for manipulating with it in loop
String[] sarr = text.split(" ");
// initializing StringBuffer as sb
StringBuffer sb = new StringBuffer();
for (int i = 0; i < sarr.length; i++) {
// getting first letter of each word during loop as fl
char fl = sarr[i].charAt(0);
// check if the word length is NOT equal with entered length,
// so adding words to StringBuffer that don't need to be deleted
if (!((sarr[i].length() % wlength == 0) && ((fl != 'a') && (fl != 'e') && (fl != 'i') && (fl != 'o') && (fl != 'u') && (fl != 'y'))))
sb.append(sarr[i]).append(" ");
}
// converting array to string and removing whitespaces from ends
String output = sb.toString().trim();
System.out.println(output + " \n\n");
Также обязательным пунктом - поддержка флагов -h и -d. То есть:
Если при флаге -h или -help отображается информация об авторе и т.д., то при флаге -d или -debug, в процессе работы отображаются дополнительные данные, которые облегчают сборку, временные данные и т д.
Проблема: Как при помощи switch это все обсутроить? Была идея это сделать при помощи if следующим образом:
if (choice == '1') {
if (args[2] == "-h" || args[2] == "help") {
System.out.println("Help 1:\nThis command is set you to enter text and length\n");
}
else if(args[2] == "-d" || args[2] == "debug") {
}
}
Полный код моей попытки:
package Lab04;
import java.util.Scanner;
public class Lab04 {
public static void main(String[] args) {
int choice;
Scanner scanner = new Scanner(System.in);
String text;
int length;
System.out.println("=============================");
System.out.println("| MENU SELECTION |");
System.out.println("=============================");
System.out.println("| Options: |");
System.out.println("| 1. Entering data |");
System.out.println("| 2. Review data |");
System.out.println("| 3. Execute calculations |");
System.out.println("| 4. Outputting result |");
System.out.println("| 5. Exit |");
System.out.println("=============================");
System.out.println("Enter your choice: ");
choice = scanner.nextInt();
/*
if (choice == '1') {
if (args[2] == "-h" || args[2] == "help") {
System.out.println("");
}
else if(args[2] == "-d" || args[2] == "debug") {
System.out.println("");
// code here
}
else
System.out.println("You've entered 1:\nEntering data: ");
text = scanner.nextLine();
}
*/
switch (choice) {
case 1:
text = scanner.nextLine();
break;
case 2:
System.out.println(text);
break;
default:
System.out.println("There is no such option\n");
break;
}
}
}
В первом кейсе идет ввод с клавиатуры текста, но во втором кейсе подчеркивается text как неинициализированная переменная
Главная проблема в том, что при вводе данных в кейсе, данные в кейсе и остаются, и остальной код эти данные не видит
Ответы (2 шт):
Думаю загвоздка в областях видимости переменных. Вам нужно объявить переменные, которые нужны вам за пределами кейсов, раньше switch.
Выглядет это примерно так:
int data = 0; //переменная которая нужна за пределами switch-case
String switcher=""; //ключ, введенный с консоли
switch (switcher) {
case ("a"): { //если введено a
data = 1;
}
case ("b"): { //если введено b
data = 42;
}
}
System.out.println(data) //выведется значение data, присвоенное внутри case
Отредактируйте вопрос и добавьте полный код чтобы можно было сказать наверняка
UPD. Инициализируйте строковую переменную пустой строкой сразу при объявлении String string = "" если не присваиваете ей значение вскоре после объявления. Это поможет избежать ошибки обращения к неиниализированной строке
Решил, и вопрос более неактуален.
Решение:
package Lab04;
import java.util.Arrays;
import java.util.Scanner;
public class Lab04 {
public static void main(String[] args) {
int choice;
Scanner scanner = new Scanner(System.in);
String text = "";
int length = 0;
String output = "";
String separator = "-";
while(true) {
System.out.println("=============================");
System.out.println("| MENU SELECTION |");
System.out.println("=============================");
System.out.println("| Options: |");
System.out.println("| 1. Entering data |");
System.out.println("| 2. Review data |");
System.out.println("| 3. Execute calculations |");
System.out.println("| 4. Outputting result |");
System.out.println("| 5. Exit |");
System.out.println("=============================");
System.out.println("Enter your choice: ");
choice = scanner.nextInt();
switch (choice) {
case 1:
System.out.println("Chosen variant: 1");
if (args.length != 0) {
if (args.length == 2) {
if ( (args[0].equals("-d") && args[1].equals("-h")) ||
(args[0].equals("-d") && args[1].equals("help")) ||
(args[0].equals("help") && args[1].equals("debug")) ||
(args[0].equals("help") && args[1].equals("-d")) ||
(args[0].equals("-h") && args[1].equals("debug")) ||
(args[0].equals("-h") && args[1].equals("-d"))
) {
System.out.println("\n================================");
System.out.println("| Author: |");
System.out.println("| Year: |");
System.out.println("| Group: |");
System.out.println("==================================\n");
}
}
if (args.length == 1) {
if (args[0].equals("-h") || args[0].equals("help")) {
System.out.println("\n================================");
System.out.println("| Author: |");
System.out.println("| Year: |");
System.out.println("| Group: |");
System.out.println("==================================\n");
}
}
if (args[0].equals("-h") == false && args[0].equals("help") == false && args[0].equals("-d") == false && args[0].equals("debug") == false)
System.out.println("No such option");
}
scanner = new Scanner(System.in);
System.out.println("\n------------------\nEnter text:");
text = scanner.nextLine();
System.out.println("\n------------------\nEnter word length: ");
length = scanner.nextInt();
System.out.println("------------------\n");
break;
case 2:
System.out.println("Chosen variant: 2");
if (args.length != 0) {
if (args.length == 2) {
if ( (args[0].equals("-d") && args[1].equals("-h")) ||
(args[0].equals("-d") && args[1].equals("help")) ||
(args[0].equals("help") && args[1].equals("debug")) ||
(args[0].equals("help") && args[1].equals("-d")) ||
(args[0].equals("-h") && args[1].equals("debug")) ||
(args[0].equals("-h") && args[1].equals("-d"))
) {
System.out.println("\n================================");
System.out.println("| Author: |");
System.out.println("| Year: |");
System.out.println("| Group: |");
System.out.println("==================================\n");
}
}
if (args.length == 1) {
if (args[0].equals("-h") || args[0].equals("help")) {
System.out.println("\n================================");
System.out.println("| Author: |");
System.out.println("| Year: |");
System.out.println("| Group: |");
System.out.println("==================================\n");
}
}
if (!args[0].equals("-h") && !args[0].equals("help") && !args[0].equals("-d") && !args[0].equals("debug"))
System.out.println("No such option!");
}
System.out.println("\n" + separator.repeat(14 + text.length()) + "\nEntered text: " + text);
System.out.println("\n" + separator.repeat(17) + "\nEntered length: " + length);
System.out.println(separator.repeat(17) + "\n");
break;
case 3:
if (text.length() == 0) {
System.out.println("\n----------------------------\nThere is no text to work out\n----------------------------\n");
break;
}
System.out.println("Chosen variant: 3");
if (args.length != 0) {
if (args.length == 2) {
if ( (args[0].equals("-d") && args[1].equals("-h")) ||
(args[0].equals("-d") && args[1].equals("help")) ||
(args[0].equals("help") && args[1].equals("debug")) ||
(args[0].equals("help") && args[1].equals("-d")) ||
(args[0].equals("-h") && args[1].equals("debug")) ||
(args[0].equals("-h") && args[1].equals("-d"))
) {
System.out.println("\n================================");
System.out.println("| Author: |");
System.out.println("| Year: |");
System.out.println("| Group: |");
System.out.println("==================================\n");
}
}
if (args.length == 1) {
if (args[0].equals("-h") || args[0].equals("help")) {
System.out.println("\n================================");
System.out.println("| Author: |");
System.out.println("| Year: |");
System.out.println("| Group: |");
System.out.println("==================================\n");
}
}
if (args[0].equals("-d") || args[0].equals("debug")) {
String[] sarr = text.split(" ");
for (int i = 0; i < sarr.length; i++) {
System.out.println("Iter" + i + ": " + sarr[i] + " ");
}
System.out.println("Splitted string: " + Arrays.toString(sarr) + "\n");
StringBuffer sb = new StringBuffer();
for (int i = 0; i < sarr.length; i++) {
char fl = sarr[i].charAt(0);
System.out.println("First letter on iter " + i + ": " + fl);
if (!((sarr[i].length() % length == 0) && ((fl != 'a') && (fl != 'e') && (fl != 'i') && (fl != 'o') && (fl != 'u') && (fl != 'y'))))
sb.append(sarr[i]).append(" ");
System.out.println("Appending word to an array with whitespace on iter. " + i + ": " + sarr[i] + "\n");
System.out.println("Temp value of array: " + Arrays.toString(sarr));
}
output = sb.toString().trim();
System.out.println("\nTrimmed string for output: " + output);
}
if (args[0].equals("-h") == false && args[0].equals("help") == false && args[0].equals("-d") == false && args[0].equals("debug") == false)
System.out.println("No such option");
}
String[] sarr = text.split(" ");
StringBuffer sb = new StringBuffer();
for (int i = 0; i < sarr.length; i++) {
char fl = sarr[i].charAt(0);
if (!((sarr[i].length() % length == 0) && ((fl != 'a') && (fl != 'e') && (fl != 'i') && (fl != 'o') && (fl != 'u') && (fl != 'y'))))
sb.append(sarr[i]).append(" ");
}
output = sb.toString().trim();
System.out.println("\n" + separator.repeat(33) + "\nCalculations are done successful!\n" + separator.repeat(33) + "\n");
break;
case 4:
System.out.println("Chosen variant: 4");
if (args.length != 0) {
if (args.length == 2) {
if ( (args[0].equals("-d") && args[1].equals("-h")) ||
(args[0].equals("-d") && args[1].equals("help")) ||
(args[0].equals("help") && args[1].equals("debug")) ||
(args[0].equals("help") && args[1].equals("-d")) ||
(args[0].equals("-h") && args[1].equals("debug")) ||
(args[0].equals("-h") && args[1].equals("-d"))
) {
System.out.println("\n================================");
System.out.println("| Author: |");
System.out.println("| Year: |");
System.out.println("| Group: |");
System.out.println("==================================\n");
}
}
if (args.length == 1) {
if (args[0].equals("-h") || args[0].equals("help")) {
System.out.println("\n================================");
System.out.println("| Author: |");
System.out.println("| Year: |");
System.out.println("| Group: |");
System.out.println("==================================\n");
}
}
if (args[0].equals("-h") == false && args[0].equals("help") == false && args[0].equals("-d") == false && args[0].equals("debug") == false)
System.out.println("No such option");
}
if (output.length() == 0) {
System.out.println(""
+ "\n---------------------------\nThere is no text for output\n---------------------------\n");
break;
}
System.out.println("\n" + separator.repeat(8 + output.length()) + "\nResult: " + output + "\n" + separator.repeat(8 + output.length()) + "\n");
break;
case 5:
System.out.println("\n----------\nExiting...\n----------\n");
System.exit(0);
default:
System.out.println("There is no such option\n");
break;
}
}
}
}