Java:根据字母的字母位置创建int值

时间:2015-06-26 22:01:50

标签: java arrays string sorting int

我的想法/问题: 我正在开展Java挑战(方向吼叫)。我已完成第1部分(如下面的代码所示)。但是,我很难用第2部分取得进展。我有兴趣听取关于如何完成这一挑战的建议/示例。如果需要的话,还可以对我在第1部分的工作进行重构。

挑战方向:

使用names.txt文件,这是一个包含资源目录中超过五千个名字的46K文本文件。

第1部分:首先将列表按字母顺序排序。将此新文件另存为answer目录中的p4aNames.txt。

第2部分:使用p4aNames.txt,取每个名称的字母值,并将此值乘以列表中的字母位置以获取名称分数。例如,当列表按字母顺序排序时,值为3 + 15 + 12 + 9 + 14 = 53的COLIN是列表中的第938个名称。因此,COLIN将获得938×53 = 49714的分数。将所有名称分数列表保存为p4bNames.txt。

第3部分:文件中所有名称分数的总和是多少?

Pic Link显示输出&目录:

http://screencast.com/t/t7jvhYeN

我当前的代码:

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 appearing before firstname 
//		System.out.println(out); Would show unsorted names
		bf.close();
		fb.close();
		
		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
		}
		pw.close();
	}
}

2 个答案:

答案 0 :(得分:1)

您在查找每个角色的数值时遇到问题?只需将字符串转换为大写,将每个字符转换为int,然后减去64以获取每个字符的数值。像这样:

int score = 0;
for (char ch: sortedStr[i].toUpperCase().toCharArray()) {
     score += (int)ch - 64;  /* A is decimal 65 */
}
score = score * i; /* multiply by position in the list */

答案 1 :(得分:0)

您可以使用try with resources,这样就不必使用file.close显式关闭文件了。

try (PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("answers/p4bNames.txt")))) {
        for (int i = 1; i <= sortedStr.length; i++) {//starting from1
            int score = 0;
            for (char ch : sortedStr[i-1].toUpperCase().toCharArray()) {
                score += ch - 'A' + 1;  //subtracting A for ex if ch is C then C - A will be 2 so adding 1 to make 3
            }
            score *= i;//mutiplying the value by the index
            pw.println(score);
            System.out.println(sortedStr[i]); // print to console just to see output
        }
    } catch (IOException ex) {
        //Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
    }