该计划的目的是将摩尔斯电码翻译成英文。我将程序的执行逻辑划分为三种情况:一个莫尔斯代码字符的翻译,两个字符和三个+字符。该程序试图翻译属于案例三的字符。如果您可以提供帮助,并决定测试该程序,请输入至少四个莫尔斯代码字符(介于a和d之间)!否则,期待一些异常的例外!
我使用的开关出了什么问题?我已经读过,直到几年前,Java还不支持使用Strings的switch语句。 Java现在支持String switch语句,如果我没有弄错的话,我的语法与这些语句的非常复杂的约定一致。为了确定编译器是否首先识别开关的主题(即switch (aReferenceThatPointsToaString)
,我在开关前面的行中打印了参考。没有问题。我还看了一下如果开关&#是否可以执行的情况39; s主题是明确说明的。我没有说switch (array3[i])
,而是在switch ("._")
写了这个测试确实导致了工作转换,让我觉得switch(array3[i])
不是{\ n}与switch(aStringexpression)
import java.util.Scanner;
public class MorseToEnglish1 {
public static void main (String[]args){
System.out.println("enter morse here");
Scanner input = new Scanner (System.in);
String container = input.nextLine();
char [] array = container.toCharArray();
int count = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] == ' ')
count++ ;
}
// count counts the number of times a space appears
System.out.println(count);
int [] array2 = new int [count];
int counter = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] == ' '){
array2[counter] = i;
counter ++ ;
}
}
// array2 assigns the indexes of spaces to its members
System.out.println(counter);
String [] array3 = new String [array2.length - 1];
for (int i = 0; i < array3.length ; i ++)
array3[i] = container.substring(array2[i], array2[i+1]);
// array3 creates substrings based on these spaces
System.out.print (array3[1]);
System.out.print(array3[0]);
// tests above
for (int i = 0; i < array3.length; i ++){
switch (array3[i]){
case ("._"):
{ System.out.println("a");
break; }
case "_...":
{ System.out.println("b");
break; }
case "_._.":
{ System.out.println("c");
break;}
case "_..":
{ System.out.println("d ");
break;}
}
}
input.close();
}
}
答案 0 :(得分:3)
你的switch
声明没有错,其余的节目有很多错误......
问题是,您的自定义“拆分”过程会在文本中留下空格,因此,如果要输入._ _... _._. _..
,则数组将被拆分为...
" _...", " _._."
两个帐号出错了,其中一个,我输入的内容丢失了,两个,它在String
中留下了前导空格字符,所以当你尝试比较String
中的switch
时{1}}声明,您实际上是在尝试做类似的事情......
"_...".equals(" _...")
哪会失败......
首先,这个“手动”拆分代码...
char[] array = container.toCharArray();
int count = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] == ' ') {
count++;
}
}
// count counts the number of times a space appears
System.out.println(count);
int[] array2 = new int[count];
int counter = 0;
for (int i = 0; i < array.length; i++) {
if (array[i] == ' ') {
array2[counter] = i;
counter++;
}
}
// array2 assigns the indexes of spaces to its members
System.out.println(counter);
String[] array3 = new String[array2.length - 1];
for (int i = 0; i < array3.length; i++) {
array3[i] = container.substring(array2[i], array2[i + 1]);
}
// array3 creates substrings based on these spaces
System.out.println(array3[1]);
System.out.println(array3[0]);
应该替换为......
String[] array3 = container.split(" ");
坦率地说,我不知道它想要实现什么,如果输入String
上的代码少于4个,并且无论如何都没有正确解析输入(抛弃值),它就会中断
答案 1 :(得分:1)
您的拆分代码会留下前导空格字符,导致它们无法正确匹配。您应该使用String.split版本来生成array3。这将创建正确的子串,工作量大大减少。
编辑: 您的拆分代码似乎也不包括第一个和最后一个莫尔斯代码,这就是当您输入少于4时获得ArrayIndexOutOfBoundsExceptions的原因。
答案 2 :(得分:-4)
从查看代码中你得到了太多}
花括号。你只需要在switch语句的末尾有一个。
case ("._"):
{System.out.println("a");
break;
case "_...":
{System.out.println("b");
break;
case "_._.":
{System.out.println("c");
break;
case "_..":
{System.out.println("d ");
break;
}
它应该工作。我的假设当然是您的问题是您的代码无法编译。我非常确定你发布的代码不会这样做。