关于转码的问题,我应该用什么方法?
question on transferring codes, what method should I use?
问题解释:正如一些评论所建议的,我会尽力把这个问题说清楚。输入来自一个文件,代码只是一个例子。据说代码应该适用于格式中的任何输入。我知道我需要使用 Scanner
来读取文件。问题是我使用什么代码来获取输出。
输入规格:
输入的第一行包含数字 N,这是后面的行数。下一个
N 行将包含至少 1 个,最多 80 个字符,none 其中 spaces.
输出规格:
输出将是 N 行。输出的第 i 行将是输入的第 i + 1 行的编码。
一行的编码将是一系列对,由 space 分隔,其中每一对是一个
整数(表示字符连续出现的次数)后跟一个space,
后跟字符。
Sample Input
4
+++===!!!!
777777......TTTTTTTTTTTT
(AABBC)
3.1415555
Output for Sample Input
3 + 3 = 4 !
6 7 6 . 12 T
1 ( 2 A 2 B 1 C 1 )
1 3 1 . 1 1 1 4 1 1 4 5
我目前只发过两道题,不太明白一个"good"题和一个"bad"题的标准?有人可以解释为什么这是一个糟糕的问题吗?点赞!
您需要解决两个不同的问题,我认为它会帮助您分别解决它们。首先是读入输入。我不清楚您是否要提示它以及它是来自控制台还是文件或到底是什么。为此,您需要初始化扫描仪,使用 nextInt 获取行数,调用 nextLine() 清除该行的其余部分,然后 运行 从 0 到行数的 for 循环,读取将下一行(使用 nextLine())转换为 String 变量。为了确保它运行良好,我建议打印出未改变的字符串,看看输出的是不是输入的。
另一个任务是将给定的输入字符串转换为所需的输出字符串。您可以独立处理,然后再将它们重新组合在一起。您将需要一个接受字符串和 returns 字符串的方法。您可以通过传递示例字符串并查看它是否返回所需的输出字符串来测试它。设置结果=“”。使用 charAt 遍历字符串中的字符,它需要 currentCharacter 和 currentCount 的变量,当字符发生变化或遇到字符串结尾时,将数字和字符连接到字符串上并重置字符计数和当前字符如所须。在循环外,return结果。
一旦解决了这两个任务,通过打印出输入字符串的方法 returns 而不是输入字符串本身,将它们放在一起。
我认为这为您指明了使用方法。这不是一个成熟的解决方案,但这不是您要求或需要的。
完整的工作代码在这里试试。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class CharTask {
public static void main(String[] args) {
List<String> lines = null;
try {
File file = new File("inp.txt");
FileInputStream ins =new FileInputStream(file);
Scanner scanner = new Scanner(ins);
lines = new ArrayList<String>();
while(scanner.hasNext()) {
lines.add(scanner.nextLine());
}
List<String> output = processInput(lines);
for (int i=1;i<output.size(); i++) {
System.out.println(output.get(i));
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
private static List<String> processInput(List<String> lines){
List<String> output = new ArrayList<String>();
for (String line: lines) {
output.add(getProcessLine(line));
}
return output;
}
private static String getProcessLine(String line) {
if(line.length() == 0) {
return null;
}
String output = "";
char prev = line.charAt(0);
int count = 1;
for(int i=1;i<line.length();i++) {
char c = line.charAt(i);
if (c == prev) {
count = count +1;
}
else {
output = output + " "+count + " "+prev;
prev = c;
count = 1;
}
}
output = output + " "+count+" "+prev;
return output;
}
}
输入
(inp.txt)
4
+++===!!!!
777777......TTTTTTTTTTTT
(AABBC)
3.1415555
输出
3 + 3 = 4 !
6 7 6 . 12 T
1 ( 2 A 2 B 1 C 1 )
1 3 1 . 1 1 1 4 1 1 4 5
问题解释:正如一些评论所建议的,我会尽力把这个问题说清楚。输入来自一个文件,代码只是一个例子。据说代码应该适用于格式中的任何输入。我知道我需要使用 Scanner
来读取文件。问题是我使用什么代码来获取输出。
输入规格: 输入的第一行包含数字 N,这是后面的行数。下一个 N 行将包含至少 1 个,最多 80 个字符,none 其中 spaces.
输出规格: 输出将是 N 行。输出的第 i 行将是输入的第 i + 1 行的编码。 一行的编码将是一系列对,由 space 分隔,其中每一对是一个 整数(表示字符连续出现的次数)后跟一个space, 后跟字符。
Sample Input
4
+++===!!!!
777777......TTTTTTTTTTTT
(AABBC)
3.1415555
Output for Sample Input
3 + 3 = 4 !
6 7 6 . 12 T
1 ( 2 A 2 B 1 C 1 )
1 3 1 . 1 1 1 4 1 1 4 5
我目前只发过两道题,不太明白一个"good"题和一个"bad"题的标准?有人可以解释为什么这是一个糟糕的问题吗?点赞!
您需要解决两个不同的问题,我认为它会帮助您分别解决它们。首先是读入输入。我不清楚您是否要提示它以及它是来自控制台还是文件或到底是什么。为此,您需要初始化扫描仪,使用 nextInt 获取行数,调用 nextLine() 清除该行的其余部分,然后 运行 从 0 到行数的 for 循环,读取将下一行(使用 nextLine())转换为 String 变量。为了确保它运行良好,我建议打印出未改变的字符串,看看输出的是不是输入的。
另一个任务是将给定的输入字符串转换为所需的输出字符串。您可以独立处理,然后再将它们重新组合在一起。您将需要一个接受字符串和 returns 字符串的方法。您可以通过传递示例字符串并查看它是否返回所需的输出字符串来测试它。设置结果=“”。使用 charAt 遍历字符串中的字符,它需要 currentCharacter 和 currentCount 的变量,当字符发生变化或遇到字符串结尾时,将数字和字符连接到字符串上并重置字符计数和当前字符如所须。在循环外,return结果。
一旦解决了这两个任务,通过打印出输入字符串的方法 returns 而不是输入字符串本身,将它们放在一起。
我认为这为您指明了使用方法。这不是一个成熟的解决方案,但这不是您要求或需要的。
完整的工作代码在这里试试。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class CharTask {
public static void main(String[] args) {
List<String> lines = null;
try {
File file = new File("inp.txt");
FileInputStream ins =new FileInputStream(file);
Scanner scanner = new Scanner(ins);
lines = new ArrayList<String>();
while(scanner.hasNext()) {
lines.add(scanner.nextLine());
}
List<String> output = processInput(lines);
for (int i=1;i<output.size(); i++) {
System.out.println(output.get(i));
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
private static List<String> processInput(List<String> lines){
List<String> output = new ArrayList<String>();
for (String line: lines) {
output.add(getProcessLine(line));
}
return output;
}
private static String getProcessLine(String line) {
if(line.length() == 0) {
return null;
}
String output = "";
char prev = line.charAt(0);
int count = 1;
for(int i=1;i<line.length();i++) {
char c = line.charAt(i);
if (c == prev) {
count = count +1;
}
else {
output = output + " "+count + " "+prev;
prev = c;
count = 1;
}
}
output = output + " "+count+" "+prev;
return output;
}
}
输入
(inp.txt)
4
+++===!!!!
777777......TTTTTTTTTTTT
(AABBC)
3.1415555
输出
3 + 3 = 4 !
6 7 6 . 12 T
1 ( 2 A 2 B 1 C 1 )
1 3 1 . 1 1 1 4 1 1 4 5