将 scanner.next() 转换为 char[]
Converting a scanner.next() to a char[]
我想给函数一个来自 scanner.next() 的字符数组。如果我尝试像现在这样转换它,我只会收到一条错误消息:
import java.util.Scanner;
public class Enigma {
private static boolean finish = false;
private static int temp = 0;
private static int[] rotors = { 1, 2, 3, 4, 5 };
private static int[] used = { 6, 6, 6 };
private static int[] rotations = { 0, 0, 0 };
private static char[] rotor1 = { 'C', 'N', 'D', 'L', 'H', 'Q', 'B', 'O', 'Y', 'G', 'R', 'T', 'U', 'E', 'M', 'V',
'S', 'Z', 'P', 'W', 'F', 'I', 'A', 'X', 'K', 'J' };
private static char[] rotor2 = { 'H', 'P', 'N', 'Y', 'X', 'B', 'U', 'E', 'R', 'Q', 'L', 'T', 'S', 'D', 'Z', 'W',
'I', 'K', 'C', 'J', 'O', 'F', 'M', 'A', 'V', 'G' };
private static char[] rotor3 = { 'J', 'I', 'H', 'Y', 'Z', 'P', 'E', 'U', 'S', 'L', 'G', 'V', 'K', 'D', 'A', 'B',
'X', 'O', 'T', 'M', 'N', 'F', 'W', 'Q', 'R', 'C' };
private static char[] rotor4 = { 'M', 'K', 'U', 'Z', 'D', 'B', 'G', 'R', 'Y', 'F', 'X', 'Q', 'H', 'C', 'A', 'N',
'E', 'L', 'T', 'J', 'I', 'P', 'S', 'V', 'O', 'W' };
private static char[] rotor5 = { 'S', 'K', 'J', 'O', 'T', 'H', 'U', 'Y', 'G', 'Z', 'F', 'L', 'I', 'X', 'P', 'V',
'R', 'Q', 'E', 'D', 'M', 'A', 'C', 'W', 'B', 'N' };
private static char[] normal = { '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' };
private static Scanner scanner = new Scanner(System.in);
public static void main(String args[]) {
System.out.println("Bitte geben sie den ersten Rotor an");
tr(Integer.parseInt(scanner.next()) - 1, 1);
System.out.println("Bitte geben sie den zweiten Rotor an");
tr(Integer.parseInt(scanner.next()) - 1, 2);
System.out.println("Bitte geben sie den dritten Rotor an");
tr(Integer.parseInt(scanner.next()) - 1, 3);
System.out.println("Bitte geben sie nun die Rotation für den ersten Rotor an");
rerot(0, Integer.parseInt(scanner.next()));
System.out.println("Bitte geben sie nun die Rotation für den zweiten Rotor an");
rerot(1, Integer.parseInt(scanner.next()));
System.out.println("Bitte geben sie nun die Rotation für den dritten Rotor an");
rerot(2, Integer.parseInt(scanner.next()));
while (finish == false) {
System.out.println(
"Bitte geben sie den Buchstaben ein, den sie Transkripieren wollen. Oder geben sie 'stop' ein um das Programm zu beenden");
System.out.println(rotor(scanner.next().toCharArray()));
}
}
private static void tr(int n, int m) {
n = check(n);
used[m - 1] = rotors[n];
}
private static int check(int n) {
for (int i = 0; i < used.length; i++) {
if (rotors[n] == used[i] || n < 0 || n > 4) {
System.out.println(
"Dieser Rotor ist entweder nicht vorhanden oder wurde schon benutzt. Bitte geben sie einen gültigen Rotor an");
n = check(Integer.parseInt(scanner.next()) - 1);
}
}
return n;
}
private static void rerot(int n, int m) {
while (m > 25) {
m = m - 26;
}
rotations[n] = m;
}
private static char[] rotor(char[] n) {
for (int i = 0; i < 3; i++) {
temp = rotors[i];
switch (temp) {
case 1:
n = rot1(n, rotations[i]);
break;
case 2:
n = rot2(n, rotations[i]);
break;
case 3:
n = rot3(n, rotations[i]);
break;
case 4:
n = rot4(n, rotations[i]);
break;
case 5:
n = rot5(n, rotations[i]);
break;
default:
break;
}
}
return n;
}
private static char[] rot1(char[] n, int m) {
for (int o = 0; o < normal.length; o++) {
if (n == normal[o]) {
o = o + m;
if (o > 25) {
o = o - 26;
}
n = rotor1[o];
break;
}
}
return n;
}
private static char[] rot2(char[] n, int m) {
for (int o = 0; o < normal.length; o++) {
if (n == normal[o]) {
o = o + m;
if (o > 25) {
o = o - 26;
}
n = rotor2[o];
break;
}
}
return n;
}
private static char[] rot3(char[] n, int m) {
for (int o = 0; o < normal.length; o++) {
if (n == normal[o]) {
o = o + m;
if (o > 25) {
o = o - 26;
}
n = rotor3[o];
break;
}
}
return n;
}
private static char[] rot4(char[] n, int m) {
for (int o = 0; o < normal.length; o++) {
if (n == normal[o]) {
o = o + m;
if (o > 25) {
o = o - 26;
}
n = rotor4[o];
break;
}
}
return n;
}
private static char[] rot5(char[] n, int m) {
for (int o = 0; o < normal.length; o++) {
if (n == normal[o]) {
o = o + m;
if (o > 25) {
o = o - 26;
}
n = rotor5[o];
break;
}
}
return n;
}
}
这是我收到的错误消息:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Incompatible operand types char[] and char
Type mismatch: cannot convert from char to char[]
at Enigma.rot1(Enigma.java:94)
at Enigma.rotor(Enigma.java:71)
at Enigma.main(Enigma.java:39)
它还在我想传递 char[] 的其他地方显示此错误。
需要添加更多文本,因为他们说代码太多而文本太少。
我认为问题在于您在第 94 行 if (n == normal[o]) {
的 rot1 中将字符数组 n
与字符 normal[o]
进行比较。您可能想要将 n[o]
与 normal[o]
进行比较。
同样,您不能分配 n = rotor1[o];
,您可能需要分配 n[o]
。函数 rot2 到 rot5 也是如此。
希望这对您有所帮助。
我想给函数一个来自 scanner.next() 的字符数组。如果我尝试像现在这样转换它,我只会收到一条错误消息:
import java.util.Scanner;
public class Enigma {
private static boolean finish = false;
private static int temp = 0;
private static int[] rotors = { 1, 2, 3, 4, 5 };
private static int[] used = { 6, 6, 6 };
private static int[] rotations = { 0, 0, 0 };
private static char[] rotor1 = { 'C', 'N', 'D', 'L', 'H', 'Q', 'B', 'O', 'Y', 'G', 'R', 'T', 'U', 'E', 'M', 'V',
'S', 'Z', 'P', 'W', 'F', 'I', 'A', 'X', 'K', 'J' };
private static char[] rotor2 = { 'H', 'P', 'N', 'Y', 'X', 'B', 'U', 'E', 'R', 'Q', 'L', 'T', 'S', 'D', 'Z', 'W',
'I', 'K', 'C', 'J', 'O', 'F', 'M', 'A', 'V', 'G' };
private static char[] rotor3 = { 'J', 'I', 'H', 'Y', 'Z', 'P', 'E', 'U', 'S', 'L', 'G', 'V', 'K', 'D', 'A', 'B',
'X', 'O', 'T', 'M', 'N', 'F', 'W', 'Q', 'R', 'C' };
private static char[] rotor4 = { 'M', 'K', 'U', 'Z', 'D', 'B', 'G', 'R', 'Y', 'F', 'X', 'Q', 'H', 'C', 'A', 'N',
'E', 'L', 'T', 'J', 'I', 'P', 'S', 'V', 'O', 'W' };
private static char[] rotor5 = { 'S', 'K', 'J', 'O', 'T', 'H', 'U', 'Y', 'G', 'Z', 'F', 'L', 'I', 'X', 'P', 'V',
'R', 'Q', 'E', 'D', 'M', 'A', 'C', 'W', 'B', 'N' };
private static char[] normal = { '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' };
private static Scanner scanner = new Scanner(System.in);
public static void main(String args[]) {
System.out.println("Bitte geben sie den ersten Rotor an");
tr(Integer.parseInt(scanner.next()) - 1, 1);
System.out.println("Bitte geben sie den zweiten Rotor an");
tr(Integer.parseInt(scanner.next()) - 1, 2);
System.out.println("Bitte geben sie den dritten Rotor an");
tr(Integer.parseInt(scanner.next()) - 1, 3);
System.out.println("Bitte geben sie nun die Rotation für den ersten Rotor an");
rerot(0, Integer.parseInt(scanner.next()));
System.out.println("Bitte geben sie nun die Rotation für den zweiten Rotor an");
rerot(1, Integer.parseInt(scanner.next()));
System.out.println("Bitte geben sie nun die Rotation für den dritten Rotor an");
rerot(2, Integer.parseInt(scanner.next()));
while (finish == false) {
System.out.println(
"Bitte geben sie den Buchstaben ein, den sie Transkripieren wollen. Oder geben sie 'stop' ein um das Programm zu beenden");
System.out.println(rotor(scanner.next().toCharArray()));
}
}
private static void tr(int n, int m) {
n = check(n);
used[m - 1] = rotors[n];
}
private static int check(int n) {
for (int i = 0; i < used.length; i++) {
if (rotors[n] == used[i] || n < 0 || n > 4) {
System.out.println(
"Dieser Rotor ist entweder nicht vorhanden oder wurde schon benutzt. Bitte geben sie einen gültigen Rotor an");
n = check(Integer.parseInt(scanner.next()) - 1);
}
}
return n;
}
private static void rerot(int n, int m) {
while (m > 25) {
m = m - 26;
}
rotations[n] = m;
}
private static char[] rotor(char[] n) {
for (int i = 0; i < 3; i++) {
temp = rotors[i];
switch (temp) {
case 1:
n = rot1(n, rotations[i]);
break;
case 2:
n = rot2(n, rotations[i]);
break;
case 3:
n = rot3(n, rotations[i]);
break;
case 4:
n = rot4(n, rotations[i]);
break;
case 5:
n = rot5(n, rotations[i]);
break;
default:
break;
}
}
return n;
}
private static char[] rot1(char[] n, int m) {
for (int o = 0; o < normal.length; o++) {
if (n == normal[o]) {
o = o + m;
if (o > 25) {
o = o - 26;
}
n = rotor1[o];
break;
}
}
return n;
}
private static char[] rot2(char[] n, int m) {
for (int o = 0; o < normal.length; o++) {
if (n == normal[o]) {
o = o + m;
if (o > 25) {
o = o - 26;
}
n = rotor2[o];
break;
}
}
return n;
}
private static char[] rot3(char[] n, int m) {
for (int o = 0; o < normal.length; o++) {
if (n == normal[o]) {
o = o + m;
if (o > 25) {
o = o - 26;
}
n = rotor3[o];
break;
}
}
return n;
}
private static char[] rot4(char[] n, int m) {
for (int o = 0; o < normal.length; o++) {
if (n == normal[o]) {
o = o + m;
if (o > 25) {
o = o - 26;
}
n = rotor4[o];
break;
}
}
return n;
}
private static char[] rot5(char[] n, int m) {
for (int o = 0; o < normal.length; o++) {
if (n == normal[o]) {
o = o + m;
if (o > 25) {
o = o - 26;
}
n = rotor5[o];
break;
}
}
return n;
}
}
这是我收到的错误消息:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Incompatible operand types char[] and char
Type mismatch: cannot convert from char to char[]
at Enigma.rot1(Enigma.java:94)
at Enigma.rotor(Enigma.java:71)
at Enigma.main(Enigma.java:39)
它还在我想传递 char[] 的其他地方显示此错误。
需要添加更多文本,因为他们说代码太多而文本太少。
我认为问题在于您在第 94 行 if (n == normal[o]) {
的 rot1 中将字符数组 n
与字符 normal[o]
进行比较。您可能想要将 n[o]
与 normal[o]
进行比较。
同样,您不能分配 n = rotor1[o];
,您可能需要分配 n[o]
。函数 rot2 到 rot5 也是如此。
希望这对您有所帮助。