在Java中读取文本文件并使用递归向后打印
编写一个Java程序,递归地从一个文件中读取十个名称,然后按相反顺序输出名称、名称列表和名称列表中的字符总数。所有循环都必须递归执行 杰伊·沃克在Java中读取文本文件并使用递归向后打印,java,list,loops,recursion,text-files,Java,List,Loops,Recursion,Text Files,编写一个Java程序,递归地从一个文件中读取十个名称,然后按相反顺序输出名称、名称列表和名称列表中的字符总数。所有循环都必须递归执行 杰伊·沃克 埃罗尔燧石 C.埃罗马德雷 比利朝圣者 米奇天使 何塞·弗朗西斯科·德·圣马丁 方形海绵长裤 米沙·特诺夫 切斯特峰 意大利铝业 本多佛 Pat待定 我完全迷路了。我想知道第一个出发点在哪里。考虑到这个程序,我想构建一个main,它将调用一个扫描仪,首先读取文件。读取文件时,它会计算文本中的字符数(快速提问,扫描仪会计算字符之间的空格吗?) 接下来,我
埃罗尔燧石
C.埃罗马德雷
比利朝圣者
米奇天使
何塞·弗朗西斯科·德·圣马丁
方形海绵长裤
米沙·特诺夫
切斯特峰
意大利铝业
本多佛
Pat待定
我完全迷路了。我想知道第一个出发点在哪里。考虑到这个程序,我想构建一个main,它将调用一个扫描仪,首先读取文件。读取文件时,它会计算文本中的字符数(快速提问,扫描仪会计算字符之间的空格吗?) 接下来,我想到的只是一个简单的打印函数,它将显示整个names.txt文件
最后,我丢失了110%的部分…我该怎么按相反的顺序列出这些名字呢?我会用什么?递归如何适应这一切?您可以使用
scanner.nextLine()
读取文件。它将读取包含空格的整行
对于如何使用递归向后打印字符串,请将其想象为一种在边上包含房屋的方法。你想向后参观房屋(尽管你是向前进入的)。所以你决定一直走到路的尽头,然后一步一步地回去打印邻居的房子的名字
function print( i )
if i == wayEnd
return
print(i + 1) // go ahead
// after you return, print:
output house at i
添加
方法代码应为:
private static Scanner scanner;
private static void readFile() {
if (!scanner.hasNext()) return;
String line = scanner.nextLine();
readFile();
System.out.println(line);
}
只需从main调用readFile()
:
public static void main(String[] args) {
scanner = new Scanner(new File("myText.txt"));
readFile();
}
递归部分的伪代码:
function printLines(lines):
if lines not empty:
print first line from lines // this prints lines in order
call printLines(remaining lines)
print first line again // this prints lines in reverse order
行的输出示例[“line1”、“line2”、“line3”]
大概是这样的:
Reader(Stream strm)
{
string line;
if(!strm.eof())
{
line = strm.ReadLine();
Reader(strm);
}
// Info - char counte etc
string parseResult = Parse(line);
Print(parseResult);
}
递归将在文件末尾停止并开始展开。最后一条信息将首先打印。我不擅长扫描,但使用Sailator的扫描仪,您可以按如下方式完成其余部分
private Scanner scanner;
static Map<String, Integer> counts = new HashMap<String, Integer>();
public static void main(String[] args) {
scanner = new Scanner(new File("myText.txt"));
readFile();
System.out.println(counts);
}
private void readFile() {
if (!scanner.hasNext()) return;
String line = scanner.nextLine();
String[] names = line.split("([\\W\\s]+)");
for(int i=0;i<names.length;i++) {
populateMap(names[i]);
}
readFile();
}
static void populateMap(String str) {
counts.put(reverse(str), str.length());
}
static String reverse(String s) {
if(s.length() == 0)
return "";
return s.charAt(s.length() - 1) + reverse(s.substring(0,s.length()-1));
}
私人扫描仪;
静态映射计数=新HashMap();
公共静态void main(字符串[]args){
扫描仪=新扫描仪(新文件(“myText.txt”);
readFile();
系统输出打印项次(计数);
}
私有void readFile(){
如果(!scanner.hasNext())返回;
字符串行=scanner.nextLine();
字符串[]名称=line.split(([\\W\\s]+)”;
对于(inti=0;i做这样的事情
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
public class Test {
public static void printname(String name,BufferedReader br)
{
if(name!=null && br!=null)
{
try {
Test.printname(br.readLine(), br);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(name);
}
}
static Scanner scanner1 = new Scanner(System.in);
public static void main(String[] args)
{
//print the names and total character in each name
try {
FileInputStream fin=new FileInputStream("d:\\file.txt");
BufferedReader br=new BufferedReader(new InputStreamReader(fin));
String n;
while((n=br.readLine())!=null)
{
System.out.println(n+" length:"+n.length());
}
fin.close();
br.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//print names in reverse order
try {
FileInputStream f=new FileInputStream("d:\\file.txt");
BufferedReader br=new BufferedReader(new InputStreamReader(f));
try {
Test.printname(br.readLine(),br);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
f.close();
br.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
请注意,我正在传递br object来训练我的Java技能,我为您编写了以下代码:
import java.util.*;
import java.io.*;
public class RecursiveReadNames{
public static final int MAXLINES = 10;
public static void main(String[] args) throws FileNotFoundException {
Scanner scan = new Scanner(new File("listOfNames.txt"));
String[] names = new String[MAXLINES];
readNames(names, scan, 0);
printNames(names,0);
System.out.println();
printNamesReverse(names,0);
System.out.println(totalNumberOfCharsInNames(names, 0,0));
}
static String[] readNames(String[] names, Scanner scan, int curLine) {
if(curLine >= MAXLINES)
return names;
names[curLine] = scan.nextLine();
return readNames(names, scan, curLine+1);
}
static void printNames(String[] names, int cur) {
if(cur >= names.length)
return;
System.out.println(names[cur]);
printNames(names, cur+1);
}
static void printNamesReverse(String[] names, int cur) {
if(cur >= names.length)
return;
printNamesReverse(names, cur+1);
System.out.println(names[cur]);
}
static int totalNumberOfCharsInNames(String[] names, int cur, int sum) {
if(cur >= names.length)
return sum;
return totalNumberOfCharsInNames(names, cur+1, sum+names[cur].length());
}
}
如果这是家庭作业,你需要用家庭作业
@Sean]标记;它正在被删除。我被纠正了,哎呀。没有更多的家庭作业标记。(如果是这样,我仍然认为最好是提前知道,这几乎肯定是家庭作业。)我知道,很晚才回复。我理解不为人们做家庭作业背后的道德,但我问了一些本来可以回答的直截了当的问题,而不是说“它正在被移除”。是的,是hwk。自从我的编程伙伴让我孤身一人以来,我一直在寻求建议和指导。是的,有很多学生在stack上发布hwk问题以获得简单的答案,但我不是其中之一,不给我的帖子一个机会并立即提交移除,这使得该网站不受欢迎,也不符合其使命声明()
import java.util.*;
import java.io.*;
public class RecursiveReadNames{
public static final int MAXLINES = 10;
public static void main(String[] args) throws FileNotFoundException {
Scanner scan = new Scanner(new File("listOfNames.txt"));
String[] names = new String[MAXLINES];
readNames(names, scan, 0);
printNames(names,0);
System.out.println();
printNamesReverse(names,0);
System.out.println(totalNumberOfCharsInNames(names, 0,0));
}
static String[] readNames(String[] names, Scanner scan, int curLine) {
if(curLine >= MAXLINES)
return names;
names[curLine] = scan.nextLine();
return readNames(names, scan, curLine+1);
}
static void printNames(String[] names, int cur) {
if(cur >= names.length)
return;
System.out.println(names[cur]);
printNames(names, cur+1);
}
static void printNamesReverse(String[] names, int cur) {
if(cur >= names.length)
return;
printNamesReverse(names, cur+1);
System.out.println(names[cur]);
}
static int totalNumberOfCharsInNames(String[] names, int cur, int sum) {
if(cur >= names.length)
return sum;
return totalNumberOfCharsInNames(names, cur+1, sum+names[cur].length());
}
}
import java.util.Scanner;
import java.io.*;
class Listnames{
public static void recursiveRead(Scanner scanner) {
String name;
if(scanner.hasNext())
{name=scanner.next();
recursiveRead(scanner);
System.out.println(name.length() +" "+ name);
}
}
public static void main(String[] args)
{
try{
Scanner scanner=new Scanner(new File("name.txt"));
scanner.useDelimiter(System.getProperty("line.separator"));
recursiveRead(scanner);
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}