莫尔斯电码 - 英语 - 译者
问题描述:
我试图做一个摩尔斯电码,英语双向翻译莫尔斯电码 - 英语 - 译者
import java.util.Scanner;
public class JavaProject {
public static void main(String[] args) {
// TODO Auto-generated method stub
char [] Eng = { 'a' ,'b' ,'c' ,'d' ,'e' ,'f' ,'g' ,'h' ,'i' ,'j' ,'k' ,'l' ,'m' ,'n' ,'o','p' ,'q' ,'r' ,'s' ,'t' ,'u' ,'v' ,'w' ,'x' ,'y' ,'z' };
String [] Code = { ".-" , "-..." , "-.-." , "-.." , "." , "..-." , "--." , "...." , ".." , ".---" , "-.-" , ".-.." , "--" , "-." , "---" , ".--." , "--.-" , ".-." , "..." , "-" , "..-" , "...-" , ".--" , "-..-" , "-.--" , "--.." , "|" };
System.out.println(" Enter Morse Code or something in English. A for english, or B for morse code.");
Scanner a = new Scanner(System.in);
String z = a.nextLine();
if (z.equals("A"));
{
System.out.println("enter in english");
Scanner f = new Scanner(System.in);
String b = f.nextLine();
for (int x = 0; x < Eng.length; x++)
{
for (int y = 0; y < b.length(); y++)
{
if (Eng [ x ] == b.charAt (y))
System.out.print (Code [ x ] + " ");
}
}
}
else if (z.equals("B"));
{
System.out.println("enter in Morse");
Scanner v = new Scanner(System.in);
String n = v.nextLine();
for (int i = 0; i < Code.length; i++)
{
for (int p = 0; p < n.length(); p++)
{
if (Eng [ i ] == n.charAt (p))
System.out.print (Eng [ i ] + " ");
}
}
}
}
}
英语莫尔斯翻译完美,但没有别的词会导致错误。
另外,我试图使它所以如果我键入“这”,那么它会去到任何一个莫尔斯或英文翻译,但它似乎没有工作
出于某种原因,这个词别的原因错误
答
变化
if (z.equals("B"));
if (z.equals("A"));
到
if (z.equals("B"))
if (z.equals("A"))
这仅仅是一个修复˚F或使你的两个块如果工作......但你写你的逻辑的方式既不英语 - >莫尔斯是正确的,也不是莫斯雷 - >英语是正确的。
工作代码:
public static void main(String[] args) {
char[] Eng = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z' };
String[] Code = { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
"....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.",
"--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-",
"-.--", "--..", "|" };
System.out.println("Enter your choice: \n1. A for English -> Morse Code \n2. B for Morse Code -> English");
Scanner a = new Scanner(System.in);
String z = a.nextLine();
if (z.equalsIgnoreCase("A")) {
System.out.println("enter in english");
String b = a.nextLine();
for (int x = 0; x < b.length(); x++) {
for (int y = 0; y < Eng.length; y++) {
if (Eng[y] == b.charAt(x))
System.out.print(Code[y] + " ");
}
}
}
else if (z.equalsIgnoreCase("B")) {
System.out.println("enter in Morse");
String n =a.nextLine();
String[] arr = n.split(" ");
for (int p = 0; p < arr.length; p++) {
for (int y = 0; y < Code.length; y++) {
if (Code[y].equals(arr[p]))
System.out.print(Eng[y]);
}
}
}
a.close();
}
提示...
- 不要使用太多的扫描仪,你是......它都可以做用只有一台扫描仪。
- 使用后务必关闭您的资源......这些都是在Java中的良好做法...
答
一)IFS后的分号是错误的。
if (z.equals("A"));
这意味着,什么都不会被执行。
b)您正在浏览英文字符,然后查看它们是否包含在输入中。错误的方式。你必须仔细阅读输入内容并查找相应的字符。你的做法是,“sos”将被编码为“oss”,因为它首先查看“o”,找到它,然后查看“s”,找到它,再次找到它 - 因为“o”首先出现在英文字母表中。
c)莫尔斯 - >英语不能这样工作,因为你不能看单莫尔斯角色。我建议通过“”(String.split)分割输入,然后将结果与Code数组进行比较以找到正确的索引。目前,sos会被检查为“。”,“。”,“。”,“ - ”,...,“。”。但是你想检查的是“...”,“---”,“...”,这将是"... --- ...".split(" ");
答
问题的结果是,你只测试一个在这个片段中的摩尔斯电码字符:
for (int p = 0; p < n.length(); p++)
{
if (Eng [ i ] == n.charAt (p))
System.out.print (Eng [ i ] + " ");
}
要确定整个学期尝试使用:
n.compareTo(Code[i]) == 0)
最终代码:
public static void main(String[] args) {
char[] Eng = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z' };
String[] Code = { ".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
"....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.",
"--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-",
"-.--", "--..", "|" };
System.out
.println(" Enter Morse Code or something in English. A for english, or B for morse code.");
Scanner a = new Scanner(System.in);
String z = a.nextLine();
if (z.equals("A")) {
System.out.println("enter in english");
Scanner f = new Scanner(System.in);
String b = f.nextLine();
for (int x = 0; x < Eng.length; x++) {
for (int y = 0; y < b.length(); y++) {
if (Eng[x] == b.charAt(y))
System.out.print(Code[x] + " ");
}
}
} else if (z.equals("B"))
{
System.out.println("enter in Morse");
Scanner v = new Scanner(System.in);
String n = v.nextLine();
for (int p = 0; p < Code.length; p++) {
if (n.compareTo(Code[p])==0){
System.out.print(Eng[p] + " ");
break;
}
}
}
不,英语并不完美,对不起SOS是不是--- ... ... ;-) –
请注意,这是莫尔斯 - 文本翻译,语言根本不包括它。 – Jasper