Java基础语法题目练习
程序员文章站
2022-03-10 18:35:32
11...
PTA交题时注意:不要输入package名字;类名必须为Main
1.输入
import java.util.Scanner;
Scanner scanner=new Scanner(System.in); //设置输入
int n=scanner.nextInt(); //输入一个int整形
String s=scanner.next(); //输入一个字符串(不包含空格,遇见空格/回车就停)
String s=scanner.nextLine(); //输入一个字符串(包含空格,遇见回车就停)
//java中没有获取单个字符的办法
//如果在输入一个整型之后紧接着输入一个nextLine
//注意要在中间再加一个scanner.nextLine() 类似C++里面的的getchar()
更快一点的
Scanner scanner = new Scanner (new BufferedInputStream(System.in));
2.字符串遍历
int sum=0;
for (int i = 0; i < s.length(); i++) {
sum+=s.charAt(i)-'0'; //通过s.charAt(i)获取每一个字符 字符->数字与C一样
}
//字符数组的遍历
char[] c=new char[105];
sum=0;
for (int i = 0; i < c.length; i++) { //获取字符数组长度不需要括号
sum+=c[i]-'0'; //通过下标获取每一个字符 字符->数字与C一样
}
3.字符串与整型的相互转换
1.整型转字符串
(1)String s=String.valueOf(n);
(2)String s=Integer.toString(n);
(3)String s=n+""; //极其方便
2.字符串转整型
(1)int t=Integer.parseInt(s);
(2)如果是字符串遍历过程中单个字符的话 s.charAt(i)-'0' 即可。不存在+'0'
4.数组的定义
int[] i=new int[5];
int[] i={0,1};
char[] s=new char[5];
char[] s={'a','b'};
string[] str=new string[15];
string[] str={"aaa","bbb","ccc"};
5.Java中的 “结构体”
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
class node{ //用类来进行封装
String name;
String id;
int score;
}
class px implements Comparator<node>{ //自定义类,通过Comparator设置排序规则
public int compare(node a,node b) {
return b.score-a.score; //b-a 代表降序, a-b代表升序
}
}
public class test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
node[] q=new node[1005];
for(int i=0;i<n;i++) {
q[i]=new node(); //类对象必须初始化!!,分配内存空间
q[i].name=sc.next();
q[i].id=sc.next();
q[i].score=sc.nextInt();
}
Arrays.sort(q,0,n,new px()); //利用Arrays进行排序
//第2 3 参数为指定范围,第4个参数为排序规则
System.out.printf("%s %s\n", q[0].name,q[0].id);
System.out.printf("%s %s\n", q[n-1].name,q[n-1].id);
}
}
6.ArrayList(对应C++的vector)
//定义
ArrayList<Integer> a = new ArrayList<Integer>();
//添加元素
a.add(1); //在末尾插入1
a.add(1,3); //在下标为1插入3
//删除元素
a.remove(1); //删除下标为1的元素
a.remove(Integer.valueOf(1)); //删除值为1的元素
//修改元素
a.set(0,1); //将下标为0的元素的值改成1
//访问元素
a.get(1) //访问下标为1的元素
//遍历
for (int i = 0; i < a.size(); i++)
{
System.out.println(sites.get(i));
}
//排序
Collections.sort(a); //运用Collections类
还可以加入排序规则
Collections.sort(a,new px()); //在自定义类px中设定规则
7.ArrayDeque(对应C++的queue)
ArrayDeque<Integer> queue = new ArrayDeque<Integer>();
queue.offer(1);//成功返回true,失败返回false,别写成push!!
queue.offer(2);
queue.offer(3);
System.out.println(queue.peek());//类似于C++中queue的front(),返回第一个元素
while (!queue.isEmpty()) {
System.out.println(queue.pop());//跟C++中的queue()一样可以删除第一个元素,但是会返回它,不像C++中是void的
}
8.ArrayDeque(也对应C++的stack,在Java中queue与stack对应一个类)
ArrayDeque<Integer> stack = new ArrayDeque<Integer>();
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack.peek());//类似于C++中stack的top(),返回栈顶元素
while(!stack.isEmpty()){
System.out.println(stack.pop());//跟C++中的pop()一样可以弹出栈顶元素,但是会返回它,不像C++中是void的
}
9.HashMap(对应C++的map)
//这里使用的是HashMap,是无序的,对应标准C++的unordered_map
//若要使用有序的,则用TreeMap
//TreeMap<Integer, Integer> m = new TreeMap<Integer, Integer>();
//定义
HashMap<Integer, Integer> m = new HashMap<Integer, Integer>();
//添加元素
m.put(1, 111);
//访问元素
m.get(1);
//根据key删除元素
m.remove(1);
m.clear();
//计算大小
m.size();
//用for-each遍历 输出 key 和 value
for (Integer i : m.keySet())
{
System.out.println("key: " + i + " value: " + m.get(i));
}
//用迭代器遍历
Iterator<Entry<Integer, Integer>> it = m.entrySet().iterator();
while(it.hasNext())
{
Entry<Integer, Integer> e = it.next();
System.out.println(e.getKey() + " " + e.getValue());
}
10.HashSet(对应C++的set)
HashSet<String> sites = new HashSet<String>();
//添加元素
sites.add("Taobao");
//判断元素是否存在
sites.contains("Taobao") //返回true false
//删除元素
sites.remove("Taobao");
sites.clear();
//计算大小
sites.size();
//迭代
for (String i : sites) {
System.out.println(i);
}
//若要有序则可使用TreeSet
11.在main函数中调用的函数必须为static定义的函数,运用的全局变量也必须是static定义的。如下素数线性筛函数:
package myjava;
import java.util.Scanner;
public class Main {
static int[] prime=new int[1000005];
static boolean[] flag=new boolean[1000005];
static int tot=0;
public static void getprime()
{
for(int i=2;i<1000000;i++)
{
if(!flag[i])
{
prime[++tot]=i;
}
for(int j=1;j<=tot;j++)
{
if(i*prime[j]>1000000)
break;
flag[i*prime[j]]=true;
if(i%prime[j]==0)
break;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
getprime();
for(int i=1;i<=tot;i++)
{
System.out.println(prime[i]);
}
}
}
12.String
(1)字符串分割函数
String s=sc.nextLine();
String[] str=s.split(" "); //将输入的字符串s按照空格分开存储
本文地址:https://blog.csdn.net/henulmh/article/details/112638446