请注意,在将我的问题标记为重复之前,我引用的是这个问题:What's the best way to check if a String represents an integer in Java?
我正在尝试检查来自表示邻接矩阵的图类的图对象。
我正在使用增强的for循环在图形中的每个节点上进行迭代,然后使用嵌套的增强的for循环在从每个节点到每个其他节点的每个连接边上进行迭代。
问题是,我正在处理一些仅具有整数值边的图形,以及一些具有非整数值边的图形。
因此,我需要编写一个方法或一系列方法,以检查图形对象中的每个边是否包含可解析为整数的字符串。
我的代码非常简单和基本,但是当使用应返回false的图示例时,我只会得到一个真实的返回值。
我的代码如下:
//method to determine if a string can be parsed as an integer greater than zero
public boolean isInteger(String str)
{
try
{ //if the string can be parsed as an int that's greater than zero...
Integer.parseInt(str);
return true;
}
catch(Exception e)
{
return false;
}
}
//method to traverse all edges in a graph object to identify whether or not all
//edges can be parsed as positive integers representing distances
public void checkParsability()
{
//while positive int edges is true and therefore all edges can be parsed as positive integers
if (positive_int_edges)
{
for (Node n : this.nodeList)
{
for (Edge a : n.getOutgoingEdges())
this.setPositive_int_edges(isInteger(a.getLabel()));
//positive_int_edges = isInteger(a.getLabel());
for (Edge a : n.getIncomingEdges())
this.setPositive_int_edges(isInteger(a.getLabel()));
//positive_int_edges = isInteger(a.getLabel());
}
}
//return positive_int_edges;
}
public boolean isPositive_int_edges() {
return positive_int_edges;
}
public void setPositive_int_edges(boolean positive_int_edges) {
this.positive_int_edges = positive_int_edges;
}
邻接矩阵图看起来像这样:
~ val AAA BB C DDD E
Alfa S ~ > ~ 99 fig
Bravo 67 999 -42 3 x ==
Charlie ~ ~ 4 ~ yz 9
Delta 4e 3 22 x ~ !=2
Echo yes ~ ~ ~ d>e 33
这应该返回false,但是由于某种原因它总是返回true。 任何帮助将不胜感激。谢谢
编辑:positive_int_edges是图形对象的布尔属性,默认设置为true。我的希望是遍历一系列边,直到找到第一个实例,在该实例中无法将字符串解析为int,在找到第一个实例之后,我想停止搜索,因为我不再需要担心剩余的状态尚未遍历的边。
编辑#2这是我尝试在驱动程序类中调用方法的方式:
System.out.println("\nthe parsability of graph g after call to parsability method is: \n");
g.checkParsability();
System.out.println(g.isPositive_int_edges());
答案 0 :(得分:1)
首先:如果您对实际的数值不感兴趣,则使用正则表达式可能会更容易:
final static Pattern IsIntegerPattern = Pattern.compile("^\\d+$");
public boolean isInteger(String str) {
return IsIntegerPattern.matcher(str).matches();
}
这可以避免引发和捕获不必要的异常。
关于结果始终为true
:事实并非如此。如果最后一个输入边不是数字,它将返回false
,因为您要遍历所有边并检查它们是否为整数,但是如果到达具有非整数值的边,则不中断循环。具有有效整数值的后续边将“覆盖”该信息。
因此您的实现应如下所示:
public void checkParsability()
{
//while positive int edges is true and therefore all edges can be parsed as positive integers
if (positive_int_edges)
{
for (Node n : this.nodeList)
{
for (Edge a : n.getOutgoingEdges()) {
this.setPositive_int_edges(isInteger(a.getLabel()));
//positive_int_edges = isInteger(a.getLabel());
break;
]
for (Edge a : n.getIncomingEdges()) {
this.setPositive_int_edges(isInteger(a.getLabel()));
//positive_int_edges = isInteger(a.getLabel());
break;
}
}
}
//return positive_int_edges;
}