java的简单问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的简单问题相关的知识,希望对你有一定的参考价值。
1、练习题目:
从文件中读入数据。该文件中的数据为多行,每行以“回车”换行。每个字符串之间是以空格分割。要求分别设置多个List,每个listRow中放入每行的数据。listAll中放入各个listRow。并打印出每行的数据。
目的:
掌握如何从文件中提取数据。
类名:
PickUpData
方法名称的定义:
(1)LinkedList insertData():从文件得到数据,并把所输入的数据放入LinkedAll中。
(a)String[] splitData(String text):以空格分割字符串,并以"回车"为结束标识!
(b) LinkedList insertLinkedList(String[] data):把data中的数据放入LinkedList中
(4)println(LinkedList linkedAll): 打印LinkedList中的数据
给个思路 最好写写代码
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class PickUpData
private String fileName;
public PickUpData(String fileName)
this.fileName = fileName;
public List insertData()
List list = new LinkedList();
try
FileReader fr = new FileReader(fileName);
BufferedReader br = new BufferedReader(fr);
String line = "";
while ((line=br.readLine()) != null)
String[] values = line.split(" +");
List listRow = new ArrayList();
for(int i=0;i<values.length;i++)
listRow.add(values[i]);
list.add(listRow);
br.close();
fr.close();
catch (Exception e) e.printStackTrace();
return list;
public void print(List list)
for(Iterator it=list.iterator();it.hasNext();)
List listRow = (List)it.next();
for(Iterator values = listRow.iterator();values.hasNext();)
System.out.print(values.next()+"\t");
System.out.println();
public static void main(String[] args)
PickUpData data = new PickUpData("d:/test.txt");
List list = data.insertData();
data.print(list);
参考技术A java.io.*;
重点是java.io.File; 参考技术B 将2楼的稍微修改下.
分割出一个方法,在将文件读入数据放入String[]里后,设置方法(b) LinkedList insertLinkedList(String[] data)中.将String[]里的内容读到List里(代码都有了).
后来又看了一眼题,觉得有点问题,比较简便的方法是使用BufferedReader的readLine()读取文件中的行放入String中,然后是用StringTokenizer的hasMoreTokens()和next()将String根据空格分割到String[]中,然后可以用Iterator的hasNext()和next()将String[]中内容放入List.打印没什么问题.
这样子比较符合题意.
Java do-while循环简单问题
【中文标题】Java do-while循环简单问题【英文标题】:Java do-while loop simple issue 【发布时间】:2015-02-22 23:27:59 【问题描述】:我已经有几年没有编码了,并且一直在编写简单的 Java 程序来重新熟悉基本原理。但是,我无法让我的 do-while 循环按照我的意愿行事。我想我不完全了解 do-while 循环是如何工作的,但我想要的是从 System.in 收集用户输入作为 int,如果他们输入一些其他数据表单,则继续请求有效的 int 输入。我所拥有的是:
do
System.out.print("Input: ");
userOption = userInput.nextInt();
while (!userInput.hasNextInt());
System.out.println("You chose to: " + menuItems.get((userOption - 1)));
这不起作用有两个原因。首先,如果我输入一个非整数值,它会立即崩溃并抛出输入不匹配异常。其次,如果我确实输入了一个有效的 int,我总是必须输入两次。即,控制台将要求输入“输入:”,我将输入“2”,控制台将前进到下一行并等待另一个输入(但不打印任何内容),然后当我输入第二个 int 时输出“您选择 [...]”。
我已经尝试了十几种不同的变体,这些变体变得越来越复杂,while 循环在 do-while 中,在 if-else 中,但我确信我把事情复杂化了,错过了一个简单的概念。非常感谢任何帮助!
【问题讨论】:
1) 如果你捕捉到异常,它不会崩溃(异常是有帮助的,不是麻烦),你可以把你的逻辑放在错误的输入上,2) 调用hasNextInt
在读取 int
之前将值存储在布尔变量中。
【参考方案1】:
这是一个独立的例子:
import java.util.*;
public class Foo
public static void main(String args[])
int userOption;
Scanner userInput = new Scanner(System.in);
System.out.print("Input: ");
while(!userInput.hasNextInt())
userInput.next();
System.out.print("Error: Please enter an integer\nInput: ");
userOption = userInput.nextInt();
System.out.println("You chose to: " +userOption);
我们第一次要求输入,虽然找不到整数,但我们将显示错误消息并丢弃用户输入的任何内容(userInput.next()
,另请参见:https://***.com/a/15973109/1063730)。
【讨论】:
【参考方案2】:好吧,为了避免它不是整数时崩溃,先把它加载到String
,然后让你的整数value = parseInt(yourInputAsString);
。
至于循环结构和双重输入,您可能需要查看userInput.hasNextInt();
的确切行为。我会建议 docs.oracle.sun 在 userInput 是什么类型的对象上。
或者您是否需要使用 userInput 对象的方法?我不太确定那是什么,你能澄清一下吗?
希望这至少会有所帮助。
【讨论】:
【参考方案3】:它没有崩溃,当输入的值不是int时会出现异常(你要求int,没有int,所以java只能抛出异常)。 您需要输入两次 int 值,因为您输入的第一个 int 是您在 userOption 语句中读取的,所以 while 条件需要输入一个新的 int 值才能使条件为真并退出。
现在,知道了这一点,您应该能够修复您的程序。
在循环中,检查是否有nextInt,如果它正在使用它(设置你的变量),如果它不是int,读取输入并丢弃它(我猜你使用扫描仪,所以nextLine会完成这项工作),您可以向用户打印提示说需要 int。
我没有写出你想要练习的确切代码。 提示,我会从 while(!input.hasNextInt) ... 祝你好运。
附:我在 Java 代码中看到的唯一一次是有人刚开始。
【讨论】:
以上是关于java的简单问题的主要内容,如果未能解决你的问题,请参考以下文章