java - 如何将字符串读取为对象?
问题描述
我在 testeAD1 类中调用了时间线(),我在 Amigo 类的列表中发布了用户发布的帖子,我使用了 hasNext,因此对于列表中的每个项目,我想获取 item.posts(其中 .posts 在 Amigo 类中),但是我收到“无法将字符串转换为 Amigo”。我是 Java 的 OOP 新手,这是一个大学项目,请帮忙。
我收到此错误:线程“main”java.lang.Error 中的异常:未解决的编译问题:类型不匹配:无法在 testeAD1.main(testeAD1.java: 117)
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
class Post{
String post;
public int qntCurtidas;
Post(String pPost){
post = pPost;
}
}
class Rede {
List<String> usuarios = new ArrayList<String>();
String I;
public void adicionarAmigo(Amigo pNome) {
usuarios.add(pNome.nome);
}
public void timeline() {
Iterator<String> it = usuarios.iterator();
while(it.hasNext()) {
System.out.println(it.next().posts);
}
}
}
class Amigo {
String nome;
List<String> posts = new ArrayList<String>();
List<String> curtidas = new ArrayList<String>();
Amigo(String pNome){
nome = pNome;
}
public void postar(Post pPost) {
posts.add(pPost.post);
}
public void curtir(Post pPost) {
curtidas.add(pPost.post);
pPost.qntCurtidas += 1;
}
}
public class testeAD1{
public static void main(String[] args) {
Amigo fulano = new Amigo("Fulano");
Amigo ciclano = new Amigo("Ciclano");
Amigo beltrano = new Amigo("Beltrano");
Rede paraiso = new Rede();
paraiso.adicionarAmigo(fulano);
paraiso.adicionarAmigo(ciclano);
paraiso.adicionarAmigo(beltrano);
Post bomdia = new Post("Bom dia!");
Post boatarde = new Post("Bom tarde!");
Post boanoite = new Post("Bom noite!");
fulano.postar(bomdia);
fulano.postar(boatarde);
ciclano.postar(boanoite);
beltrano.curtir(bomdia);
beltrano.curtir(boatarde);
beltrano.curtir(boanoite);
fulano.curtir(boanoite);
/* DEBUG */
System.out.println(fulano.nome);
System.out.println(ciclano.nome);
System.out.println(beltrano.nome);
System.out.println("USERS IN NETWORK(REDE)");
System.out.println(paraiso.usuarios);
System.out.println("POSTS MADE BY USER");
System.out.println(fulano.posts);
System.out.println(ciclano.posts);
System.out.println(beltrano.posts);
System.out.println("POSTS LIKED BY USER");
System.out.println(beltrano.curtidas);
System.out.println(fulano.curtidas);
System.out.println(ciclano.curtidas);
System.out.println("NUMBER OF LIKES FOR EACH POST");
System.out.println(bomdia.qntCurtidas);
System.out.println(boatarde.qntCurtidas);
System.out.println(boanoite.qntCurtidas);
System.out.println("Timeline:");
paraiso.timeline();
}
}
解决方案
您需要如下修改您的类。否则,不需要 Post 和 Amigo 类。您需要将 Post 存储在 List 中,而不是存储 String。Amigo 也一样。
您的类需要更多修改才能实现实际的 oop 行为。
class Post {
String post;
public int qntCurtidas;
Post(String pPost) {
post = pPost;
}
}
class Rede {
List<Amigo> usuarios = new ArrayList<Amigo>();
String I;
public void adicionarAmigo(Amigo pNome) {
usuarios.add(pNome);
}
public void timeline() {
Iterator<Amigo> it = usuarios.iterator();
while (it.hasNext()) {
Amigo I = it.next();
Amigo HA = I;
System.out.println(HA.posts);
}
}
}
class Amigo {
String nome;
List<Post> posts = null;
List<Post> curtidas = null;
Amigo(String pNome) {
nome = pNome;
posts = new ArrayList<Post>();
curtidas = new ArrayList<Post>();
}
public void postar(Post pPost) {
posts.add(pPost);
}
public void curtir(Post pPost) {
curtidas.add(pPost);
pPost.qntCurtidas += 1;
}
}
推荐阅读
- php - 使用 php-worker 表单 laradock 时找不到 ZipArchive
- python - 为 Pyarrow 设置裤子解释器
- javascript - 如何顺序运行几个 gulp 函数?
- java - FoundationDB 中的 getKey 返回意外结果
- python - 在 Python 中实例化画布:tkinter.TclError: no display name and no $DISPLAY environment variable
- c++ - 如何专门化模板化运算符重载?
- javascript - div 滑块超出边界(数组长度)
- r - 在 ggplot 中绘制主题和项目增长曲线模型与仅主题的问题
- c# - c#动态sql循环通过服务器命令或linq
- python - Jupyter Notebook 加载 .ipynb 文件时出错