Java 无意中在开关盒内部连续填充的阵列
我最近在做的事情上遇到了麻烦。为了保持简洁,我希望我的程序能如下运行:Java 无意中在开关盒内部连续填充的阵列,java,arrays,switch-statement,do-while,Java,Arrays,Switch Statement,Do While,我最近在做的事情上遇到了麻烦。为了保持简洁,我希望我的程序能如下运行: 用户输入一个数字,然后检查该数字是否为有效选项。如果该选项无效,将显示一条错误消息,并再次显示主菜单 如果选择了有效的选项,则switch case将接受所选的选项并运行每个case语句中的代码 一旦代码在switch case部分运行完毕,它将循环回到顶部并重新显示主菜单,进程1-3将继续运行,直到用户选择选项4退出程序 我似乎遇到的问题是,当我进入案例1时,它喜欢循环通过一段不需要循环的代码,并继续向数组中添加一个
if((side1 == 0 || side2 == 0 || side3 == 0))
{
// Problem with do-while loop begins here
triangleArray[trianglesAdded] = new Triangle();
System.out.println("Default triangle created");
trianglesAdded += 1;
}
其中triangleArray是一个大小为100的三角形对象数组,trianglesAdded跟踪实际添加到数组中的三角形数量,并作为该数组索引的变量。因为它一直在向这个数组中添加三角形对象,所以我得到了一个错误,因为数组一旦达到极限就不能再容纳任何三角形对象,这意味着我也不能循环回到主菜单
所以我的问题是:我怎样才能使它停止在这一部分循环(因为它只会发生一次,并且一次只能向数组中添加一个三角形对象),并使它在运行完之后能够完整循环并再次显示主菜单
完整代码如下:
do
{
while(validMenuOption == false)
{
System.out.println("1. Enter data for a new triangle.");
System.out.println("2. Print all triangles sorted by area, smallest to largest.");
System.out.println("3. Print only triangles with a specific color.");
System.out.println("4. Exit the program.");
System.out.print("\nPlease enter in a number to select an option: ");
menuOption = sc.nextInt();
if(menuOption >= 1 && menuOption <= 4)
{
validMenuOption = true;
}
else
{
System.out.println("Invalid menu choice. Please try again.\n");
validMenuOption = false;
}
if(menuOption == 1 && trianglesAdded == triangleArray.length - 1)
{
System.out.println("The triangle array has hit the max. You are unable to add more triangles.");
validMenuOption = false;
}
}
switch(menuOption)
{
case 1:
...
// If one, two, or all of the side lengths given are zero and the color of the triangle is 1, creates a default triangle
// with the sides being 1 and the color being 1
if((side1 == 0 || side2 == 0 || side3 == 0))
{
// Problem begins here
triangleArray[trianglesAdded] = new Triangle();
System.out.println("Default triangle created");
trianglesAdded += 1;
}
// If side lengths greater than zero were given, creates a triangle with the side lengths and color given
else
{
triangleArray[trianglesAdded] = new Triangle(side1, side2, side3, color);
System.out.println("Triangle created with specified size and color");
}
break;
case 2:
...
break;
case 3:
...
break;
case 4:
...
break;
default:
...
break;
}
} while(true);
do
{
while(validMenuOption==false)
{
System.out.println(“1.输入新三角形的数据”);
System.out.println(“2.打印所有按面积排序的三角形,从最小到最大。”);
System.out.println(“3.仅打印具有特定颜色的三角形”);
System.out.println(“4.退出程序”);
System.out.print(“\n请输入一个数字以选择一个选项:”);
menuOption=sc.nextInt();
如果(menuOption>=1&&menuOption那么,你有一个bug。因此,当你遇到bug时,你会做每个人都会做的事情:你在头脑中一行一行地计算你的程序应该做什么。然后你将它与计算机告诉你它认为你的代码意味着什么进行比较。如果你的大脑和计算机不一致,你就会发现一个bug
你的程序说“validMenuOption”是假的
我输入'1'
validMenuOption设置为true,我们循环“输入while块”
vMO现在是真的,所以while循环结束后,我们继续
开关运行,我们执行“添加三角形”部分
外部环路
validMenuOption仍然为true
所以..当循环运行零次时,整个“获取一些输入”
您可能希望首先重置validMenuOption,或者希望它是一个do{}while()
循环。好吧,你有一个bug。所以当你遇到bug时,你会做每个人都会做的事情:你在头脑中一行一行地计算你的程序应该做什么。然后你将它与计算机告诉你它认为你的代码意味着什么进行比较。如果你的大脑和计算机不一致,你就会发现一个bug
你的程序说“validMenuOption”是假的
我输入'1'
validMenuOption设置为true,我们循环“输入while块”
vMO现在是真的,所以while循环结束后,我们继续
开关运行,我们执行“添加三角形”部分
外部环路
validMenuOption仍然为true
所以..当循环运行零次时,整个“获取一些输入”
您可能希望首先重置validMenuOption,或者希望它是一个do{}while();
循环。您可以尝试以下代码
while(true){
System.out.println("1. Enter data for a new triangle.");
System.out.println("2. Print all triangles sorted by area, smallest to largest.");
System.out.println("3. Print only triangles with a specific color.");
System.out.println("4. Exit the program.");
System.out.print("\nPlease enter in a number to select an option: ");
menuOption = sc.nextInt();
switch(menuOption){
case 1:
if(trianglesAdded == triangleArray.length - 1)
{
System.out.println("The triangle array has hit the max. You are unable to add more triangles.");
return;
}
// If one, two, or all of the side lengths given are zero and the color of the triangle is 1, creates a default triangle
// with the sides being 1 and the color being 1
if((side1 == 0 || side2 == 0 || side3 == 0))
{
// Problem begins here
triangleArray[trianglesAdded] = new Triangle();
System.out.println("Default triangle created");
trianglesAdded += 1;
}
// If side lengths greater than zero were given, creates a triangle with the side lengths and color given
else
{
triangleArray[trianglesAdded] = new Triangle(side1, side2, side3, color);
System.out.println("Triangle created with specified size and color");
}
break;
case 2:
...
break;
case 3:
...
break;
case 4:
...
break;
default:
System.out.println("Invalid menu choice. Please try again.\n");
break;
}
}
您可以尝试以下代码
while(true){
System.out.println("1. Enter data for a new triangle.");
System.out.println("2. Print all triangles sorted by area, smallest to largest.");
System.out.println("3. Print only triangles with a specific color.");
System.out.println("4. Exit the program.");
System.out.print("\nPlease enter in a number to select an option: ");
menuOption = sc.nextInt();
switch(menuOption){
case 1:
if(trianglesAdded == triangleArray.length - 1)
{
System.out.println("The triangle array has hit the max. You are unable to add more triangles.");
return;
}
// If one, two, or all of the side lengths given are zero and the color of the triangle is 1, creates a default triangle
// with the sides being 1 and the color being 1
if((side1 == 0 || side2 == 0 || side3 == 0))
{
// Problem begins here
triangleArray[trianglesAdded] = new Triangle();
System.out.println("Default triangle created");
trianglesAdded += 1;
}
// If side lengths greater than zero were given, creates a triangle with the side lengths and color given
else
{
triangleArray[trianglesAdded] = new Triangle(side1, side2, side3, color);
System.out.println("Triangle created with specified size and color");
}
break;
case 2:
...
break;
case 3:
...
break;
case 4:
...
break;
default:
System.out.println("Invalid menu choice. Please try again.\n");
break;
}
}
我会完全删除validMenuOption
变量,并将其移动到单独的函数中,如下所示:
public int getMenuOption() {
Scanner sc = new Scanner(System.in);
int menuOption = 0;
System.out.println("1. Enter data for a new triangle.");
System.out.println("2. Print all triangles sorted by area, smallest to largest.");
System.out.println("3. Print only triangles with a specific color.");
System.out.println("4. Exit the program.");
System.out.print("\nPlease enter in a number to select an option: ");
menuOption = sc.nextInt();
if(menuOption < 1 || menuOption > 4) {
return 0;
} else {
return menuOption;
}
}
boolean run = true;
int[] triangleArray = new int[100];
int trianglesAdded = 0;
while (run) {
menuOption = getMenuOption();
switch(menuOption) {
case 0:
System.out.println("Invalid menu choice. Please try again.\n");
break;
case 1:
if(trianglesAdded == triangleArray.length - 1) {
System.out.println("The triangle array has hit the max. You are unable to add more triangles.");
run = false;
} else {
triangleArray[trianglesAdded] = 1; // or whatevery number or object you want
System.out.println("Default triangle created");
trianglesAdded += 1;
}
break;
default:
break;
}
}
为了简单起见,我将triangleArray
设置为int
数组。
我还添加了一个boolean
变量run
,该变量在设置为true
时运行,并在输入while
时从getMenuOption()
函数中获取menuOption
值
现在,如果它得到0
,它将打印菜单选项为falsebreak
s并返回循环的开头,然后再次返回getMenuOption()
。如果输入1
,它将进入案例1
你提到的问题是:
我得到一个错误,因为数组一旦达到极限就不能再容纳任何三角形对象
通过添加条件来解决此问题,该条件在添加之前检查长度,就像我所做的那样
要退出它,您需要添加另一个案例
,该案例将运行
设置为错误
:
case 4:
run = false;
等等
这里是供您立即测试的。我已将数组的大小更改为2
,这样您可以看到它在达到极限时停止运行。我将完全删除validMenuOption
变量,并将其移动到单独的函数,类似这样:
public int getMenuOption() {
Scanner sc = new Scanner(System.in);
int menuOption = 0;
System.out.println("1. Enter data for a new triangle.");
System.out.println("2. Print all triangles sorted by area, smallest to largest.");
System.out.println("3. Print only triangles with a specific color.");
System.out.println("4. Exit the program.");
System.out.print("\nPlease enter in a number to select an option: ");
menuOption = sc.nextInt();
if(menuOption < 1 || menuOption > 4) {
return 0;
} else {
return menuOption;
}
}
boolean run = true;
int[] triangleArray = new int[100];
int trianglesAdded = 0;
while (run) {
menuOption = getMenuOption();
switch(menuOption) {
case 0:
System.out.println("Invalid menu choice. Please try again.\n");
break;
case 1:
if(trianglesAdded == triangleArray.length - 1) {
System.out.println("The triangle array has hit the max. You are unable to add more triangles.");
run = false;
} else {
triangleArray[trianglesAdded] = 1; // or whatevery number or object you want
System.out.println("Default triangle created");
trianglesAdded += 1;
}
break;
default:
break;
}
}
为了简单起见,我将triangleArray
设置为int
数组。
我还添加了一个boolean
变量run
,该变量在设置为true
时运行,并在输入while
时从getMenuOption()
函数中获取menuOption
值
现在,如果它得到0
,它将打印菜单选项为falsebreak
s,并返回循环的开始,然后返回getMen