我不知道如何创建一个字符数组,更糟糕的是,一个作为“扫描器”(System.in)的数组。我会解释:
1 = A, J, S.
2 = B, K, T.
3 = C, L, U.
4 = D, M, V.
5 = E, N, W.
6 = F, O, X.
7 = G, P, Y.
8 = H, Q, Z.
9 = I, R.
我想输入一个名字,并从每个字母中接收(输出)等效的数字。但是我不知道怎么做。例如:
Ericson = 5993165.
但我不希望有一个整数,我希望每个数都是一个完全独立的索引,因为我要“算名字”。
下面是我在没有扫描仪的情况下尝试的一个例子:
public static void main(String[] args) {
int[][] arrays = new int[9][3];
}
9数组的每个索引都是一个有3个字母的字符数组。也许我的想法完全错误。
非常感谢大家的关注!
编辑:
我正在做这样的实验:
public static void main(String[] args) {
char[][][][] Array1 = {{{{1},{'A'},{'J'},{'S'}}}};
char[][][][] Array2 = {{{{2},{'B'},{'K'},{'T'}}}};
char[][][][] Array3 = {{{{3},{'C'},{'L'},{'U'}}}};
char[][][][] Array4 = {{{{4},{'D'},{'M'},{'V'}}}};
char[][][][] Array5 = {{{{5},{'E'},{'N'},{'W'}}}};
char[][][][] Array6 = {{{{6},{'F'},{'O'},{'X'}}}};
char[][][][] Array7 = {{{{7},{'G'},{'P'},{'Y'}}}};
char[][][][] Array8 = {{{{8},{'H'},{'Q'},{'Z'}}}};
char[][][] Array9 = {{{9},{'I'},{'R'}}};
System.out.println('E'+'R'+'I'+'C'+'S'+'O'+'N');
}
这比我之前的想法要好,但我认为我还远远不够。(同样,主要的问题是:这个“ericson”需要是一个扫描器,因为名称不是一个确定的变量。它可以是任何东西。)
我会说,是的,让我们停下来,用完全不同的方式来看待这个问题。
1) 这些多维数组会占用空间,并不是创建查找表的最有效方法,而这正是您使用它的目的
2)查找表由易于计算的算法定义,从“A”开始,每个字母的值为1-9。1-9范围在到期时重复
3)这需要能够处理从扫描仪
输入的任何类型的字符串,并分别检查字符串中的每个字母。
以下是我的总体代码建议:
String incomingString = "Ericson";
String outputValue = "";
for (int i = 0; i < incomingString.length(); i++) {
int numberRepresentation = incomingString.charAt(i);
if (numberRepresentation >= 'a') {
numberRepresentation -= 'a';
} else if (numberRepresentation >= 'A') {
numberRepresentation -= 'A';
}
numberRepresentation = (numberRepresentation % 9) + 1;
outputValue += numberRepresentation;
}
解释:
1) 对整个字符串进行迭代:
for (int i = 0; i < incomingString.length(); i++) {
int numberRepresentation = incomingString.charAt(i);
// other code here
}
我们的incomingString变量包含我们将要进行计算的字符串。我们在字符串中的每个字符上创建一个for
循环,将给定字符的整数值存储到变量numberRepresentation中。此整数值是它在ASCII/Unicode表中存在的位置的编号
优化/扩展:每次都需要计算任何String length()方法调用,可以将其提取到循环外的常数。
2) 规范化字符:
// other code above
if (numberRepresentation >= 'a') {
numberRepresentation -= 'a';
} else if (numberRepresentation >= 'A') {
numberRepresentation -= 'A';
}
// other code below
您可能知道(也可能不知道),字符文字可以用作整数,其值在ASCII表中。这段代码检查字符是小写(大于或等于'a'的值)还是大写(大于或等于'a'的值)。通过减去“a”或“a”的值,numberRepresentation中存储的数字是字符与字母表中“a”的距离
优化/扩展:这些检查只确认字符至少是“a”或“a”,不检查字符是否是字母,如果不是字母,则应抛出错误。此外,如果使用一些字符方法,可读性可以得到改善。
3)应用个性转换:
// other code above
numberRepresentation = (numberRepresentation % 9) + 1;
// other code below
这就是实际工作完成的地方:计算每个标准化字符值的模和可能值的数量(9)。由于这些结果将是0-8,我们在结果中添加一个,使可能的范围为1-9
优化/扩展:值9是一个常量,因此应该提取到一个局部命名变量。这也将允许编码根据需要进行更改,即如果您更喜欢1-5编码。删除行尾的“1”可以使“0”成为可能的输出值。
4) 附加到正在运行的输出:
// other code above
outputValue += numberRepresentation;
// other code below
在这里,我们的新值被连接到当前构建的字符串,完成后,该字符串应该是我们的计算字符串
优化/扩展:由于这个字符串连接在一个循环中进行,系统将不断为新的字符串对象创建/分配空间。通过使用StringBuilder对象组合一系列计算字符,可以避免这种浪费。
扩展:最重要的是,如果这段代码要多次使用,它肯定应该被提取到一个方法中,这样它就可以很容易地访问。
完成了代码,实现了所有扩展:
public static String calculateName(String incomingString) throws Exception {
StringBuilder outputBuilder = new StringBuilder();
final int encodingRange = 9;
final int limit = incomingString.length();
for (int i = 0; i < limit; i++) {
int numberRepresentation = incomingString.charAt(i);
if (!Character.isLetter(numberRepresentation)) {
throw new Exception("Incorrect String format");
}
if (Character.isLowerCase(numberRepresentation)) {
numberRepresentation -= 'a';
} else {
numberRepresentation -= 'A';
}
numberRepresentation = (numberRepresentation % encodingRange) + 1;
outputBuilder.append(numberRepresentation);
}
return outputBuilder.toString();
}
如果需要字符,为什么不将数组声明为字符
public static void main(String[] args) {
char[][] arrays = new char[][] {
{ 'A', 'J', 'S' },
{ 'B', 'K', 'T' },
{ 'C', 'L', 'U' },
{ 'D', 'M', 'V' },
{ 'E', 'N', 'W' },
{ 'F', 'O', 'X' },
{ 'G', 'P', 'Y' },
{ 'H', 'Q', 'Z' },
{ 'I', 'R', '*' }
} ;
}
然后有一个嵌套的for循环,通过数组查找字母并返回行号1,因为它从0开始,然后将数字1放入arraylist
ArrayList<int> myArr = new ArrayList<int>();
myarr.add(i);
任何arraylist都类似于一个数组,但它没有固定的大小,您可以继续添加它。这使得所有的数字都是单独的,而不是作为一个整体。
我创建了一个简单的扫描器,用于计算中的字符串数。txt文件。每个字符串位于下一行。它算错了,每次它给我数字297,甚至有超过20000个字符串。这个txt文件是由我编写的另一个程序创建的,它从网站获取链接,并使用FileWriter和BufferedWriter将其保存到。txt文件。可能有什么问题? 编辑:字符串示例:
我写了一个小程序,它检查字符串是否按照用户输入的字母顺序排序,并用空白隔开一行。它的工作,这是伟大的,但我不明白的是,为什么我可以使用扫描器创建数组时,大小还没有设置。任何见解都将不胜感激。
我制作了一个简单的程序,根据公式中的3个数字计算增量。但是,小数点后的分数和数字(如3.33、3/4)有问题。如果我将其替换为任何字母,则会出现错误: 线程“main”java中出现异常。util。java上的InputMismatchException。base/java。util。扫描仪。throwFor(Scanner.java:939)访问java。base/java。util。扫描仪。下
问题内容: 问题答案: 您可以尝试这样的事情: 除非我误解你,否则这似乎是很基本的东西
我有一系列骰子,对于每个骰子,我需要提示用户是否要重新滚动它。最简单的方法似乎是使用扫描仪类进行提示 - 我检查他们输入的内容并适当地处理。但是,如果用户输入中不存在请求的数据,则 scanner.next() 将引发异常。所以,扫描仪.hasnext()需要以某种方式适应这里。 这是我的密码;它会将条目输入到响应数组中,但如果用户输入既不包含Y也不包含N,则会抛出异常。 我如何调用scanswo
这是一项学校作业,我已经尝试太久了。我知道如何打印字符总数(如代码所示)。例如,输入和将导致。如何打印或每个名称的长度?