import javax.swing.*;
public class Main {
public static void main(String[] args) throws FileNotFoundException {
File file = new File(args[0]);
Scanner input = new Scanner(file);
int i = 0;
String names[] = null;
int slices[] = {};
while (input.hasNext()) {
names[i] = input.next();
slices[i] = input.nextInt();
i++;
}
JFrame f = new JFrame("Pie chart");
f.setSize(600, 350);
f.setDefaultCloseOperation(
JFrame.EXIT_ON_CLOSE);
f.add(new PieChart());
f.setVisible(true);
}
}
这是我的第二个档案......
import java.awt.*;
import javax.swing.*;
public class PieChart
extends JComponent {
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g.create();
Graphics2D g3 = (Graphics2D) g.create();
g3.setColor(Color.BLACK);
g2.setColor(Color.BLUE);
for (int i = 0; i < 5; i = i + 1) {
g2.fillRect(230, 20 * i + 50 , 20, 20);
g3.drawString("swallow", 255, 20 * i + 65);
g3.drawString("37.0%", 385, 20 * i + 65);
}
g2.fillArc(50, 50, 150, 150, 0, 360);
}
}
我试图从一个文本文件读取到两个单独的数组。我想要一个数组来保存名称,然后一个数组来保存值。然后,我希望能够从第二个文件中访问数组中的值。我目前的问题是它不接受input.next();进入名称[]和切片[]的数组。我该如何解决这个问题?
以下是示例文本文件:
swallow 10
magpie 5
fairywren 7
osprey 2
fantail 3
答案 0 :(得分:0)
我目前的问题是它不接受input.next();进入名称[]和切片[]的数组。我该如何解决这个问题?
while (input.hasNext()) {
应该是while (input.hasNextLine()) {
然后,您可能需要使用input.nextLine()
来获取实际文本,并使用第二个Scanner
来解析单个行
我试图从一个文本文件读取到两个单独的数组。我想要一个数组来保存名称,然后一个数组来保存值。然后,我希望能够从第二个文件中访问数组中的值。
您应该将数组传递给PieChart
类,可能是通过构造函数。
在进行任何自定义绘画之前,您还应该调用super.paintComponent
它给了我一个NullPointerException错误,它说它在第16行是“names [i] = input.next();”
names
永远不会被初始化(null
)...
String names[] = null;
int slices[] = {};
阵列不是动态的,所以除非事先知道有多少行,否则管理员并不是特别容易。
在你的情况下,假设文件没有改变,你可以使用类似......
的东西String names[] = new String[5];
int slices[] = new int[5];
另一种选择是使用某种List
或Map
,它们是动态的,所以你不需要知道手头可能需要多少元素。
有关详细信息,请参阅Collections Trail
答案 1 :(得分:0)
如果你知道在开始添加项目大小之前你应该使用数组(例如,它将有20个索引)。在这里,似乎你直到运行时才知道。因此,数组不是最好的数据结构。请考虑使用array list。
ArrayList<String> names = new ArrayList()<String>;
while(...){
names.add(input.nextLine());
}
System.out.print(names.get(3)) //prints the 4th name
答案 2 :(得分:0)
String names[] = null;
您需要先为name
指定一个非空数组,然后才能为其元素赋值;否则你会得到你观察到的NullPointerException
。
但是,您不知道需要多少元素,因此您应该使用可调整大小的数据结构,例如ArrayList
。
如果您像{}
一样将names
分配给slices
,则会得到ArrayIndexOutOfBoundsException
,因为它没有元素,但您正在尝试分配第0个值。