JAVA学习笔记(一)Vector类中set方法的使用问题
2015-03-28 13:38
711 查看
最近在学习JAVA语言,前天做了一个学校实验报告册里的实验,题目如下:
设计并实现一个应用程序,创建一个柱状图,用于查看一组数字分布情况。程序在1-100的整数范围内读取任意数量的整数(以-1结束),然后生成一个类似一于下面所示的图,以指明有多少输入值分别属于1-10,11-20,等等。对应每一个输入值打印出一个星号。
(1)程序输出格式如下:
1 - 10 | * * * *
11 - 20 | * *
21 - 30 | * * * * * * * * * * * * * *
31 - 40 |
41 - 50 | * * *
51 - 60 | * * * * * * * *
61 - 70 | * *
71 - 80 | * * * * *
81 - 90 | * * * * * * *
91 - 100 | * * * * *
思来想去,不知道如何用数组实现动态申请空间。再请教度娘之后呢,我了解了vector这个类,于是就有了一下程序:
但是,这个程序是有问题的,问题主要出在
为了搞清到底为何会出现这个错误,我们先来看下api中对于该方法的解释:
set
public E set(int index,
E element)
Replaces the element at the specified position in this Vector with the specified element.
Specified by:
set in interface List<E>
Overrides:
set in class AbstractList<E>
Parameters:
index - index of element to replace.
element - element to be stored at the specified position.
Returns:
the element previously at the specified position.
Throws:
ArrayIndexOutOfBoundsException - index out of range (index < 0 || index >= size()).
Since:
1.2
很明显,vector.set的用法是取代特定位置上的元素。也就是说必须vector中已经存在了元素,才可以使用set进行修改。修改后的代码如下:
以上修改正确,代码成功运行。
设计并实现一个应用程序,创建一个柱状图,用于查看一组数字分布情况。程序在1-100的整数范围内读取任意数量的整数(以-1结束),然后生成一个类似一于下面所示的图,以指明有多少输入值分别属于1-10,11-20,等等。对应每一个输入值打印出一个星号。
(1)程序输出格式如下:
1 - 10 | * * * *
11 - 20 | * *
21 - 30 | * * * * * * * * * * * * * *
31 - 40 |
41 - 50 | * * *
51 - 60 | * * * * * * * *
61 - 70 | * *
71 - 80 | * * * * *
81 - 90 | * * * * * * *
91 - 100 | * * * * *
思来想去,不知道如何用数组实现动态申请空间。再请教度娘之后呢,我了解了vector这个类,于是就有了一下程序:
import java.util.Scanner; import java.util.Vector; public class Exp2_3_1 { public static Vector<Integer> getNumber(){ System.out.print("please input numbers:"); int n=0; Vector<Integer> num = new Vector<Integer>(1,1); @SuppressWarnings("resource") Scanner in=new Scanner(System.in); do { num.set(n, in.nextInt()); n++; }while(num.get(n)!=-1); return num; } public static void print(int x,int n){ System.out.print(x-9+" - "+(x)+" | "); for(int i=0;i<n;i++){ System.out.print("*"); } System.out.print("\n"); } public static void main(String[] args){ Vector<Integer> num=getNumber(); int[] mark=new int[10]; int y=num.size()-1; while(y>0){ for(int i=0;i<10;i++){ if(num.get(y)-(i+1)*10<=0){ mark[i]++;break; } } y--; } for(int i=0;i<10;i++) print((i+1)*10,mark[i]); } }
但是,这个程序是有问题的,问题主要出在
num.set(n, in.nextInt());这条语句上面,错误提示为数组越界。
为了搞清到底为何会出现这个错误,我们先来看下api中对于该方法的解释:
set
public E set(int index,
E element)
Replaces the element at the specified position in this Vector with the specified element.
Specified by:
set in interface List<E>
Overrides:
set in class AbstractList<E>
Parameters:
index - index of element to replace.
element - element to be stored at the specified position.
Returns:
the element previously at the specified position.
Throws:
ArrayIndexOutOfBoundsException - index out of range (index < 0 || index >= size()).
Since:
1.2
很明显,vector.set的用法是取代特定位置上的元素。也就是说必须vector中已经存在了元素,才可以使用set进行修改。修改后的代码如下:
import java.util.Scanner; import java.util.Vector; public class Exp2_3 { public static Vector<Integer> getNumber(){ System.out.print("please input numbers:"); Vector<Integer> num = new Vector<Integer>(1,1); @SuppressWarnings("resource") Scanner in=new Scanner(System.in); do { int x=in.nextInt(); if(x==-1) break; num.add(x); }while(true); return num; } public static void print(int x,int n){ System.out.print(x-9+" - "+(x)+" | "); for(int i=0;i<n;i++){ System.out.print("*"); } System.out.print("\n"); } public static void main(String[] args){ Vector<Integer> num=getNumber(); int[] mark=new int[10]; int y=num.size()-1; while(y>0){ for(int i=0;i<10;i++){ if((num.get(y)-(i+1)*10)<=0){ mark[i]++;break; } } y--; } for(int i=0;i<10;i++) print((i+1)*10,mark[i]); } }
以上修改正确,代码成功运行。
相关文章推荐
- java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释
- 我的嵌入式学习笔记(2)--scanf使用常见问题及解决方法
- JNI学习笔记5——本地方法处理java数组/引用问题/缓存jfieldID/jmethodID
- 我的嵌入式学习笔记(2)--scanf使用常见问题及解决方法
- 我的嵌入式学习笔记(2)--scanf使用常见问题及解决方法
- selenium学习笔记- selnium.RunScript(string script) 方法的使用 及有关自动化测试文本编辑器未解决的问题
- 【Java学习笔记】使用split()方法分割字符串
- Java学习笔记27:模板Velocity使用方法
- C++ Primer 学习笔记(1)——vector的使用方法
- Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与LinkedHashSet类))
- Java学习笔记37:Spring 使用 @ResponseBody 返回中文乱码问题解决
- java学习笔记---Java可变参数方法重载时要注意的几个问题
- java学习笔记_log4j使用方法
- Android(java)学习笔记107-0:通过反射获得构造方法并且使用
- Android(java)学习笔记107-1:通过反射获得带参构造方法并且使用
- Android(java)学习笔记108:通过反射获取私有构造方法并且使用
- Android(java)学习笔记109:通过反射获取成员变量和成员方法并且使用
- Java学习笔记2:使用replaceAll()方法替换字符串中的反斜杠:左斜杠(\)和右斜杠(/)
- Java学习笔记------BufferedLine类的readLine()方法 使用须知
- Java学习笔记--HashMap中使用object做key的问题【转】