【发布时间】:2015-09-14 01:29:19
【问题描述】:
我的想法/问题:
我正在处理 Java 挑战(说明如下)。我已经完成了第 1 部分(如下代码所示)。我非常接近完成第 2/3 部分。
正如您将在我的代码中看到的,我有 2 个 for 循环。第一个,遍历我的排序名称数组。第二,遍历每个名字中的字符。
如说明中所述,将为每个字符生成一个 int 值,然后将这些值相加。所以,A 是 1,B 是 2,C 是 3……ABC 是 6。然后将这个 int 值乘以给定字符串/名称的索引号。所以,如果 ABC(值为 6)在索引 2 处,它的分数将为 12。
以上步骤完成后,我将所有的分数(每个名字的分数)相加。
以上是我对方向的理解。
问题是我的输出如下所示:
"AARON"
0
"ABBEY"
-25
"ABBIE"
-82
"ABBY"
-90
"ABDUL"
-80
"ABE"
-260
"ABEL"
-240
"ABIGAIL"
-133
"ABRAHAM"
-128
"ABRAM"
-225
"ADA"
-540
"ADAH"
-506
"ADALBERTO"
216
"ADALINE"
-182
"ADAM"
-574
"ADAN"
-600
"ADDIE"
-592
"ADELA"
-629
我的逻辑已经运行了几次,对我来说似乎是正确的,但我不知道我是如何生成这些数字的。我唯一的想法是引号(“)正在抛弃我的计算。它们的 ASCII 值为 34。我试图在我的代码中的多个位置使用 replace() 和 replaceAll() 删除它们,但是我也没有。
我做错了什么/我该如何解决它/我需要做什么来完成这项任务/我如何改进我的代码?
挑战路线:
使用 names.txt 文件,这是一个 46K 的文本文件,包含在资源目录中找到的超过 5000 个名字。
第 1 部分: 首先将列表按字母顺序排序。将此新文件另存为答案目录中的 p4aNames.txt。
第 2 部分: 使用 p4aNames.txt,获取每个名称的字母值,并将该值乘以其在列表中的字母位置以获得名称分数。例如,当列表按字母顺序排序时,价值 3 + 15 + 12 + 9 + 14 = 53 的 COLIN 是列表中的第 938 个名称。因此,COLIN 将获得 938 × 53 = 49714 的分数。将所有名称分数的列表保存为 p4bNames.txt。
第 3 部分: 文件中所有名称分数的总和是多少?
显示输出和目录的图片链接:
http://screencast.com/t/tiiBoyOpR
我当前的代码:
package app;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
public class AlphabetizedList {
public static void main() throws IOException {
new AlphabetizedList().sortingList();
}
public void sortingList() throws IOException {
FileReader fb = new FileReader("resources/names.txt");
BufferedReader bf = new BufferedReader(fb);
String out = bf.readLine();
out = out.substring(out.indexOf("\"")); //get rid of strange characters appearingbeforefirstname
// System.out.println(out); // output:
// "MARY","PATRICIA","LINDA","BARBARA","ELIZABETH","JENNIFER","MARIA"...
String[] sortedStr = out.split(",");
Arrays.sort(sortedStr);
PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("answers/p4aNames.txt")));
for (int i = 0; i < sortedStr.length; i++) {
pw.println(sortedStr[i]);
System.out.println(sortedStr[i]);// print to console just to see output
int score = 0;
// sortedStr[i].replaceAll("\"", ""); // I used this to try to remove the "s from my Strings
for (char ch: sortedStr[i].toUpperCase().toCharArray()) {
score += ((int)ch - 64); /* A is decimal 65 */
}
score = score * i; /* multiply by position in the list */
pw.println(score);
System.out.println(score);
}
bf.close();
fb.close();
pw.close();
}
}
【问题讨论】:
标签: java arrays string sorting replace