华为的一道上机题,我用java写怎么老是莫名其妙的异常呢? 问题不在我说的那里 应该出在MyString的compare和equals方法上 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我想楼主的compare方法写错了public int compareTo(MyString o) { if(this.subLength>o.subLength) return -1; else if(this.subLength>o.subLength) // 这里跟上个if条件一样 return 1; else return 0; }应该改为public int compareTo(MyString o) { if(this.subLength>o.subLength) return -1; else if(this.subLength<o.subLength) return 1; else return 0; }试试 package com.xyj.test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedList;import java.util.List;public class Test6 { private static List<String> list = new LinkedList<String>(); public static void main(String[] args) { BufferedReader reader = null; try { reader = new BufferedReader(new InputStreamReader(System.in)); String str = reader.readLine(); List<String> list = getWordList(str); List<String> reList = sortWordByLength(list); for(Iterator<String> iter=reList.iterator(); iter.hasNext();) { System.out.println(iter.next()); } } catch (IOException e) { e.printStackTrace(); } finally { if(reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } } public static List<String> getWordList(String str) { StringBuilder sb = new StringBuilder(); for(int i=0; i<str.length(); i++) { char c = str.charAt(i); if(c<='z'&&c>='a' || c<='Z'&&c>='A') { sb.append(c); } else { if(sb.length()!=0 && !"".equals(sb.toString().trim())) { list.add(sb.toString()); } sb = new StringBuilder(); } if(i == str.length()-1) { if(sb.capacity() != 0) { list.add(sb.toString()); } } } return list; } public static List<String> sortWordByLength(List<String> list) { List<String> reList = new ArrayList<String>(); int size = list.size(); int totalSize = size; while(reList.size() < totalSize) { int maxLength = 0; int maxIndex = 0; for(int i=0; i<size; i++) { int len = list.get(i).length(); if(len > maxLength) { maxLength = len; maxIndex = i; } } reList.add(list.get(maxIndex)); list.remove(maxIndex); size--; } return reList; }} 面试可以用库函数不?字符串用正则表达式匹配下,得到的串分别塞到自写类MyString里面,MyString实现个Comparable接口覆盖equals全部塞到TreeSet里面打印下,这种允许么? package huawei.exam;import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;public class StringSort { private List<String> words = new ArrayList<String>(); public void getWords(String test_str) { Pattern p = Pattern.compile("[a-zA-Z]{2,}+"); Matcher m = p.matcher(test_str); while (m.find()) { String tmp_str = m.group(); if (check(tmp_str)) words.add(getindex(tmp_str),tmp_str); } } private boolean check(String tmp_str) { if (words.contains(tmp_str)) { return false; } else { return true; } } private int getindex(String tmp_str){ int tmp_length = tmp_str.length(); int words_length = words.size(); if(words_length==0){ return 0; } else{ for(int i =0;i<words_length;i++){ if(tmp_length >= words.get(i).length()){ continue; }else{ return i; } } return words_length; } } private String newString() { String newString = ""; for(int i =0;i<words.size();i++){ if(i!= words.size()-1) newString += words.get(i)+" "; else newString += words.get(i); } return newString; } public static void main(String[] args) { StringSort ss = new StringSort(); ss.getWords("hello12dd21 we / ;dw"); System.out.println(ss.newString()); }} static class MyString implements Comparable<MyString>{ String str; public MyString(String str){ this.str = str; } @Override public int compareTo(MyString obj) { if(equals(obj)){ return 0; } if(str.length() > obj.str.length()){ return -1; } else{ return 1; } } @Override public boolean equals(Object obj) { if(!(obj instanceof MyString)){ return false; } MyString temp = (MyString)obj; if(!str.equals(temp.str)){ return false; } return true; } } 求救!java se spring2 整合struts2 出现错误! java里面如何把几行字符串按行写到txt文件里面???? 求助,日期的计算 Swing对AWT的第三个改进 如何从数据库中读BMP到BufferedImage中去 关于package的两个问题? 一个在简单不过的问题了 高手来帮我启动cloudview~~!!!(人工呼吸) 有关于线程的synchronized()方法和wait()在那个类里? 静态环境下不允许类的参数是泛型类型,实在不理解! Java调用文件打开框的疑问(个人觉得很有必要)
if(this.subLength>o.subLength)
return -1;
else if(this.subLength>o.subLength) // 这里跟上个if条件一样
return 1;
else
return 0;
}
应该改为public int compareTo(MyString o) {
if(this.subLength>o.subLength)
return -1;
else if(this.subLength<o.subLength)
return 1;
else
return 0;
}
试试
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;public class Test6 {
private static List<String> list = new LinkedList<String>();
public static void main(String[] args) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(System.in));
String str = reader.readLine();
List<String> list = getWordList(str);
List<String> reList = sortWordByLength(list);
for(Iterator<String> iter=reList.iterator(); iter.hasNext();) {
System.out.println(iter.next());
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static List<String> getWordList(String str) {
StringBuilder sb = new StringBuilder();
for(int i=0; i<str.length(); i++) {
char c = str.charAt(i);
if(c<='z'&&c>='a' || c<='Z'&&c>='A') {
sb.append(c);
} else {
if(sb.length()!=0 && !"".equals(sb.toString().trim())) {
list.add(sb.toString());
}
sb = new StringBuilder();
}
if(i == str.length()-1) {
if(sb.capacity() != 0) {
list.add(sb.toString());
}
}
}
return list;
}
public static List<String> sortWordByLength(List<String> list) {
List<String> reList = new ArrayList<String>();
int size = list.size();
int totalSize = size;
while(reList.size() < totalSize) {
int maxLength = 0;
int maxIndex = 0;
for(int i=0; i<size; i++) {
int len = list.get(i).length();
if(len > maxLength) {
maxLength = len;
maxIndex = i;
}
}
reList.add(list.get(maxIndex));
list.remove(maxIndex);
size--;
}
return reList;
}
}
字符串用正则表达式匹配下,得到的串分别塞到自写类MyString里面,MyString实现个Comparable接口覆盖equals全部塞到TreeSet里面打印下,这种允许么?
package huawei.exam;import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class StringSort {
private List<String> words = new ArrayList<String>(); public void getWords(String test_str) {
Pattern p = Pattern.compile("[a-zA-Z]{2,}+");
Matcher m = p.matcher(test_str);
while (m.find()) {
String tmp_str = m.group();
if (check(tmp_str))
words.add(getindex(tmp_str),tmp_str);
}
} private boolean check(String tmp_str) {
if (words.contains(tmp_str)) {
return false;
} else {
return true;
}
} private int getindex(String tmp_str){
int tmp_length = tmp_str.length();
int words_length = words.size();
if(words_length==0){
return 0;
}
else{
for(int i =0;i<words_length;i++){
if(tmp_length >= words.get(i).length()){
continue;
}else{
return i;
}
}
return words_length;
}
}
private String newString() {
String newString = "";
for(int i =0;i<words.size();i++){
if(i!= words.size()-1)
newString += words.get(i)+" ";
else
newString += words.get(i);
}
return newString;
} public static void main(String[] args) {
StringSort ss = new StringSort();
ss.getWords("hello12dd21 we / ;dw");
System.out.println(ss.newString());
}
}
String str;
public MyString(String str){
this.str = str;
}
@Override
public int compareTo(MyString obj) {
if(equals(obj)){
return 0;
}
if(str.length() > obj.str.length()){
return -1;
}
else{
return 1;
}
} @Override
public boolean equals(Object obj) {
if(!(obj instanceof MyString)){
return false;
}
MyString temp = (MyString)obj;
if(!str.equals(temp.str)){
return false;
}
return true;
}
}