Java 切换问题、阵列打印
-所以在案例2中,我试图让用户只输入具有特定数组位置的元素(N,Y,p,D,G)。我在开关内部使用开关,但如果他输入错误的元素,我如何重新循环 -在案例3中,我试图打印整个2D数组,但原始数组中填充了元素G -在案例4中,我尝试将地图视图更改为符号 我只是觉得这是一种实践,在某种程度上,我试图学习初学者复杂编程,因此非常感谢您的帮助,非常感谢您的批评,因为我想对java有一个良好的基础知识:)Java 切换问题、阵列打印,java,switch-statement,Java,Switch Statement,-所以在案例2中,我试图让用户只输入具有特定数组位置的元素(N,Y,p,D,G)。我在开关内部使用开关,但如果他输入错误的元素,我如何重新循环 -在案例3中,我试图打印整个2D数组,但原始数组中填充了元素G -在案例4中,我尝试将地图视图更改为符号 我只是觉得这是一种实践,在某种程度上,我试图学习初学者复杂编程,因此非常感谢您的帮助,非常感谢您的批评,因为我想对java有一个良好的基础知识:) import java.util.Scanner; 公共课学习{ 公共静态void main(字符串[
import java.util.Scanner;
公共课学习{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(System.in);
int行;
int col;
int row1;//对于案例2,它将允许用户在请求数组中输入元素
int col1;
System.out.println(“输入行:”);//了解二维数组的行和列以作为其余数组的基础。
row=input.nextInt();
System.out.println(“输入列:”);
col=input.nextInt();
串句;
串句2;
串句3;
字符串元素;
字符串N;
弦Y;
字符串G;
字符串P;
字符串D;
智力选择;
System.out.println(“菜单\n1)按顺序输入元素\n2)输入列和行号规格。\n3)按原样显示原始映射\n4)显示符号映射。“);
choice=input.nextInt();
System.out.println(选择);
字符串[][]映射=新字符串[行][列];
开关(选择)
{
案例1:
sentence3=input.nextLine();//由于某种原因,它会自动将第一个映射[0][0]输入为null,这一行允许用户输入映射[0][0]
map[0][0]=第3句;
对于(int i=0;imap.length;i++)
{
对于(int j=0;j>map[i]。长度;j++)
{
map[i][j]=N;
//打印状态,需要找到如何做。
}
}**强文本**
打破
案例4:
//用符号代替字母,N=*,P=~,Y=,G=#,D=@
//
}
}
}
既然您将此作为练习,我将不回答您的问题,而是提供一些关于正在发生的事情的见解和一些要查看的链接:
案例2:
你真的不需要第二个开关。请看开关中每种情况的代码,代码完全相同。您要使用的是while循环,并测试输入是否有效。这样,如果用户输入无效的输入,它将要求他们重试
案例3:关于如何打印2D阵列,有很多例子,这取决于您希望它的外观
案例4:这实际上只是案例3的扩展,除了打印出存储的输入字母外,还打印出符号。这就是第二个switch语句可能有用的地方。情况2:
我不知道为什么要在中使用switch语句来检查案例是N、Y、p、D还是G。为了检查正确的输入,可以使用while循环,并在放置正确的输入时中断
System.out.println("Enter the row");
row1 = input.nextInt();
System.out.println("Enter the col");
col1 = input.nextInt();
while(true){
System.out.println("Enter the element you want to enter");
tempelement = input.nextLine();
if(tempelement.equals("N") || tempelement.equals("Y") || tempelement.equals("P") || tempelement.equals("D") || tempelement.equals("G")){
map[row1][col1] = tempelement;
break;
}
}
案例3:
要打印二维数组,需要嵌套的for循环。它需要2个循环
for(int i=0; i<map.length; i++){
for(int j=0; j<map[i].length; j++){
System.out.print(map[i][j]);
}
System.out.print("\n"); // this is for spacing after a row of element prints
}
for(int i=0;isentence3=input.nextLine();//由于某种原因,它自动将第一个映射[0][0]输入为null,这一行允许用户输入映射[0][0]
使用input.next()
而不是nextLine()
如官方文件所述:
使此扫描仪前进到当前行,并返回所需的输入
已跳过。此方法返回当前行的其余部分,
不包括末端的任何线分隔符。该位置设置为
下一行的开头
调用nextLine()
后,它没有正确地终止分配的内存行。因此,当第一次调用nextLine()
时,它实际上终止了前一行中实际有值的内容--通过nextInt()输入
而不是接受新的字符串值。这就是为什么sentence3
得到null
值的原因
在案例2中,我试图让用户输入元素
(N,Y,P,D,G)仅具有特定的数组位置。我在
切换,但如果他输入错误的元素,我如何重新循环
你可以试试这个
for(int i=0; i<map.length; i++){
for(int j=0; j<map[i].length; j++){
System.out.print(map[i][j]);
}
System.out.print("\n"); // this is for spacing after a row of element prints
}
...
for(int j=0; j<map[i].length; j++){
switch(map[i][j]){
case "N": System.out.print("Symbol"); break;
case "P": ... code
... code
}
}
boolean bVaildInput = true;
do{
System.out.println("Enter the element you want to enter");
tempelement = input.next();
switch (tempelement)
{
case "Y":
map[row1][col1] = tempelement;
break;
case "N":
map[row1][col1] = tempelement;
break;
case "P":
map[row1][col1] = tempelement;
break;
case "D":
map[row1][col1] = tempelement;
break;
case "G":
map[row1][col1] = tempelement;
break;
default :
System.out.println("Invalid Input");
bValidInput = false;
}
}while(!bVaildInput);
for (int i=0;i < map.length;i++)
{
for (int j=0; j < map[i].length; j++)
{
System.out.print(map[i][j]+"\t");
}
System.out.print("\n");
}