I want to give a function a char array from scanner.next(). I only get an error message if I try to convert it like I do it now:
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; } }
This is the errormessage I get:
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)
It also shows this error on the other ones where I want to pass the char[] over.
Need to add more text cause they say it is too much code and too less text.
Advertisement
Answer
I think the problem is you are comparing a char array n
to a char normal[o]
in rot1 on line 94 if (n == normal[o]) {
. You might want to compare n[o]
to normal[o]
instead.
Similarly, you can’t assign n = rotor1[o];
, you might want to assign n[o]
instead. This is also the case with the functions rot2 to rot5.
Hope this was helpful.