Вы явно не показали весь свой код для этого и других классов, поэтому приведенный ниже примерный код в основном использует то, что вы предоставили ... в некоторой степени. Подсказки разбиты и предоставлены в определенных c методах класса. Метод main () вызывает только другой метод, который фактически начинает вращение шара (так сказать). Это сделано, чтобы избежать необходимости в статике.
Метод startApp () вызывает метод mainMenu () , который, в свою очередь, отображает главное меню для этого консольного приложения. , Меню содержится в пределах oop, чтобы гарантировать, что пользователь правильно сделал запись.
Параметр, выбранный в главном меню, возвращается из метода mainMenu () как целочисленное значение, которое затем попадает в управление блоком switch / case , который в свою очередь определяет, должны ли быть указаны центр и радиус (пункт меню 1 ) или должны быть указаны конечные точки окружности (пункт меню 2 ).
Если необходимо указать Центр и Радиус, то вызывается метод getCenterAndRadius () , который предлагает пользователю указать значение Центра и Радиуса.
Если a Конечные точки круга должны быть предоставлены, затем вызывается метод getCircleEndPoints () , который предлагает пользователю ввести все четыре значения (x1, y1, x2, y2), чтобы составить две требуемые конечные точки для кружок.
Доступен также дополнительный метод с именем getCenterAndRadius_2 () , который демонстрирует еще один способ предоставления пользователю значения конечной точки. Используйте тот, который подходит вам лучше всего, или создайте свои собственные методы на основе некоторых идей, приведенных в коде.
Использование Регулярные выражения используются в предоставленном коде. Методы String # match () , String # split () и методы String # replaceAll () используют эти регулярные выражения.
import java.util.Scanner;
public class KI23CriclesDriver {
// KI23GetC gc = new KI23GetC();
// KI23GetCircles gs = new KI23GetCircles();
// KI23PrintC p = new KI23PrintC();
private final Scanner userInput = new Scanner(System.in);
private final String ls = System.lineSeparator();
private int x1 = 0, y1 = 0, x2 = 0, y2 = 0;
public static void main(String[] args) {
// Done this way to avoid statics
new KI23CriclesDriver().startApp(args);
}
private void startApp(String[] args) {
int menuOption = mainMenu();
switch (menuOption) {
case 1:
getCenterAndRadius();
break;
case 2:
getCircleEndPoints();
// getCircleEndPoints_2();
break;
}
}
private int mainMenu() {
int menuChoice = 0;
while (menuChoice == 0) {
System.out.println("Supply a circle creation option:");
System.out.println(" 1) Based on Center and Radius." + ls
+ " 2) Based on Diameter End Points.");
System.out.print("Choice: --> ");
String choice = userInput.nextLine().trim();
if (choice.toLowerCase().startsWith("q")) {
// Quit appplication
System.exit(0);
}
if (!choice.matches("[12]")) {
System.err.println("Invalid menu choice! Try again..." + ls);
continue;
}
menuChoice = Integer.parseInt(choice);
}
return menuChoice;
}
private void getCenterAndRadius() {
System.out.println("Please enter the Center and Radius:");
String center = "", radius = "";
// Center
while (center.equals("")) {
System.out.print("Center Value: --> ");
center = userInput.nextLine();
if (!center.matches("\\d+")) {
System.err.println("Invalid entry for CENTER! Try again...");
center = "";
}
}
// Radius
while (radius.equals("")) {
System.out.print("Radius Value: --> ");
radius = userInput.nextLine();
if (!radius.matches("\\d+")) {
System.err.println("Invalid entry for RADIUS! Try again...");
radius = "";
}
}
System.out.println(new StringBuffer("").append("Center = ").append(center)
.append(" | Radius = ").append(radius));
/* Do what you want here with the numerical values
contained within the String variables center and
radius.
*/
}
private void getCircleEndPoints() {
System.out.println("Please enter the Circle End Points:");
String xx1 = "", yy1 = "", xx2 = "", yy2 = "";
// x1
while (xx1.equals("")) {
System.out.print("x1 Value: --> ");
xx1 = userInput.nextLine();
if (!xx1.matches("\\d+")) {
System.err.println("Invalid entry for x1! Try again...");
xx1 = "";
}
}
// y1
while (yy1.equals("")) {
System.out.print("y1 Value: --> ");
yy1 = userInput.nextLine();
if (!yy1.matches("\\d+")) {
System.err.println("Invalid entry for y1! Try again...");
yy1 = "";
}
}
// x2
while (xx2.equals("")) {
System.out.print("x2 Value: --> ");
xx2 = userInput.nextLine();
if (!xx2.matches("\\d+")) {
System.err.println("Invalid entry for x2! Try again...");
xx2 = "";
}
}
// y2
while (yy2.equals("")) {
System.out.print("y2 Value: --> ");
yy2 = userInput.nextLine();
if (!yy2.matches("\\d+")) {
System.err.println("Invalid entry for y2! Try again...");
yy2 = "";
}
}
System.out.println(new StringBuffer("").append("Circle End Points Suplied: (")
.append(xx1).append(",").append(yy1).append("), (")
.append(xx2).append(",").append(yy2).append(")"));
/* Do what you want here with the numerical values
contained within the String variables xx1, yy1,
xx2, and yy2.
*/
}
private void getCircleEndPoints_2() {
System.out.println("Please enter the Circle End Points:" + ls
+ "Example Entries: 50 50 65 72 or" + ls
+ " 50,50,65,72 or" + ls
+ " 50, 50, 65, 72");
int xx1, yy1, xx2, yy2;
String endPoints = "";
while (endPoints.equals("")) {
System.out.print("End Points: --> ");
endPoints = userInput.nextLine();
if (!endPoints.replaceAll("[ ,]","").matches("\\d+") ||
endPoints.contains(",") ? endPoints.split("\\s{0,},\\s{0,}").length != 4
: endPoints.split("\\s+").length != 4) {
System.err.println("Invalid End Points Entry! Try again...");
endPoints = "";
}
}
String[] points = endPoints.contains(",") ?
endPoints.split("\\s{0,},\\s{0,}") :
endPoints.split("\\s+");
xx1 = Integer.parseInt(points[0]);
yy1 = Integer.parseInt(points[1]);
xx2= Integer.parseInt(points[2]);
yy2 = Integer.parseInt(points[3]);
System.out.println(new StringBuffer("").append("Circle End Points Suplied: (")
.append(xx1).append(",").append(yy1).append("), (")
.append(xx2).append(",").append(yy2).append(")"));
/* Do what you want here with the numerical values
contained within the int type variables xx1, yy1,
xx2, and yy2.
*/
}
}
Регулярные выражения, используемые в коде:
if (!choice.matches("[12]")) {
Выражение "[12]"
, содержащееся здесь в методе match () это если условие в основном означает следующее: если предоставленная строка, содержащаяся в переменной choice , равна , а не , либо "1", либо "2", введите if code block.
if (!center.matches("\\d+")) {
Выражение "\\d+"
, содержащееся здесь в методе match () этого условия if в основном означает this: Если предоставленная строка, содержащаяся в переменной center , равна , а не строковым представлением одной или нескольких цифр (от 0 до 9), введите код , если блок.
Это выражение используется в нескольких местах.
endPoints.replaceAll("[ ,]", "")
Выражение "[ ,]"
, содержащееся здесь в методе replaceAll () , означает замену все пробелы ("") и запятые (,) из строки, содержащейся в строковой переменной endPoints .
endPoints.split("\\s+")
Содержимое выражения "\\s+"
здесь в методе split () означает: разбить строку, содержащуюся в переменной endPoints , в массив строк на основе одного или нескольких разделителей пробелов ("")
endPoints.split("\\s{0,},\\s{0,}")
Выражение "\\s{0,},\\s{0,}"
, содержащееся здесь в методе split () , означает: разбить строку, содержащуюся в переменной endPoints , в массив строк на основе запятой (" , ") разделители ИЛИ любой разделитель запятой / пробела (например:", "или", "или", "или", ") независимо от количества пробелов (если есть) по обе стороны от запятая Он в основном охватывает все основы использования запятых.
Измените код по своему усмотрению.