Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 2d数组向元素添加一个错误_Java_Arrays_Multidimensional Array - Fatal编程技术网

Java 2d数组向元素添加一个错误

Java 2d数组向元素添加一个错误,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,在我正在开发的程序中,我必须找到一个包含在未指定输入量中的字母对。如果发现两个连续的英文字母相同,不区分大小写,那么我会在我的2d数组中添加一个26行26列的元素。这是我的密码: import java.util.Scanner; public class Freq{ private static final int ROWS = 26; private static final int COLS = 26; private static int[] [] alphabe

在我正在开发的程序中,我必须找到一个包含在未指定输入量中的字母对。如果发现两个连续的英文字母相同,不区分大小写,那么我会在我的2d数组中添加一个26行26列的元素。这是我的密码:

import java.util.Scanner;
public class Freq{
    private static final int ROWS = 26;
    private static final int COLS = 26;
    private static int[] [] alphabet = new int[ROWS][COLS];
    public static void main(String[] args) {
        String line;
        Scanner userInput = new Scanner(System.in);
        while(userInput.hasNextLine()) {
            line = userInput.nextLine();
            processLine(line);

        }
        printArray();

    }
    public static void processLine(String line) {
        line = line.toUpperCase();
        for(int i = 0; i < alphabet.length; i++) {
            for(int j = 0; j < alphabet[i].length; j++) {
                for (int a = 0; a < line.length() - 1; a++) {
                    char firstLetter = line.charAt(a);
                    char secondLetter = line.charAt(a + 1);
                    if (firstLetter == secondLetter) {
                        alphabet[firstLetter - 65][secondLetter - 65] += 1;
                    }
                }
            }
        }
    }
    public static void printArray() {
    for (int b = 0; b < alphabet.length; b++) {
        for (int c = 0; c < alphabet[b].length; c++){
            System.out.print(alphabet[b][c] + " ");
        }
        System.out.println();
    }
    }
}
我相信它们被添加到了正确的位置,但为什么我的程序要将676添加到索引中,而不仅仅是添加1?非常感谢您的帮助。谢谢大家!

您的
processLine()
方法没有多大意义。首先,您应该只迭代输入字符串,而不是整个2D数组,即:

public static void processLine(String line) {
    line = line.toUpperCase();
    for (int a=0; a < line.length() - 1; a++) {
        char firstLetter = line.charAt(a);
        char secondLetter = line.charAt(a + 1);
        if (firstLetter == secondLetter) {
            alphabet[firstLetter - 65][secondLetter - 65] += 1;
        }
    }
}
publicstaticvoidprocessline(字符串行){
line=line.toUpperCase();
对于(int a=0;a
其次,2D数组将只在对角线上有条目,因为您只在两个维度的两个字符相同的情况下进行赋值。因此,您可以使用1D阵列:

private static int[] alphabet = new int[ROWS];

public static void processLine(String line) {
    line = line.toUpperCase();
    for (int a=0; a < line.length() - 1; a++) {
        char firstLetter = line.charAt(a);
        char secondLetter = line.charAt(a + 1);
        if (firstLetter == secondLetter) {
            alphabet[firstLetter - 65] += 1;
        }
    }
}
private static int[]字母表=新的int[行];
公共静态void进程行(字符串行){
line=line.toUpperCase();
对于(int a=0;a
您要做的是将矩阵上该位置的值与1相加,如果您希望该位置为1,只需将其赋值即可 更换这条线

alphabet[firstLetter - 65][secondLetter - 65] += 1;
用这个

alphabet[firstLetter - 65][secondLetter - 65] = 1;
或者将processLine方法更改为

 public static void processLine(String line) {
        line = line.toUpperCase();
            for (int a = 0; a < line.length() - 1; a++) {
                    char firstLetter = line.charAt(a);
                    char secondLetter = line.charAt(a + 1);
                    if (firstLetter == secondLetter) {
                        alphabet[firstLetter - 65][secondLetter - 65] += 1;
            }
        }
    }
publicstaticvoidprocessline(字符串行){
line=line.toUpperCase();
对于(int a=0;a

希望这能回答你的问题

哇,我觉得自己好笨啊哈哈。谢谢你的帮助。另外,如果我有“aaaa”,并且我只希望数组中的第一个元素被添加一次会怎么样?对于
aaaabbaaaa
,会发生什么?
aa
有两个条目吗?还是只有一个?只有一个,我只是在寻找每行字母对的一个匹配项。你可以使用一个映射,但是如果只将任何正计数视为1,而不将任何计数视为不匹配,在逻辑上会有什么错误?我想不会有任何错误。我的意思是,如果我输入两行输入:aabbaa aabbaa,我希望2d数组中的第一个元素是2。我不知道我会怎么做。我无法将元素设置为1。因为如果我有10行带有“aa”,那么我的第一个元素中只有1行,而我想要10行。
 public static void processLine(String line) {
        line = line.toUpperCase();
            for (int a = 0; a < line.length() - 1; a++) {
                    char firstLetter = line.charAt(a);
                    char secondLetter = line.charAt(a + 1);
                    if (firstLetter == secondLetter) {
                        alphabet[firstLetter - 65][secondLetter - 65] += 1;
            }
        }
    }